web-dev-qa-db-ja.com

検出方法Android ListView Scrolling Stopped?

スクロールが停止した後に何かを実行しようとしています。そのため、OnScrollListener#onScrollStateChanged(SCROLL_STATE_IDLE)を使用して、スクロールが停止したことを検出しようとしました(TOUCH_SCROLL or FLING)(1.5では、期待どおりに実行されます)。しかし、2.0で実行すると、onScrollStateChangedは指を離した後にイベントを受信できません。そのイベントを検出するためのコールバックまたはとにかくありますか?

27
koji lin

SetOnScrollListenerを使用してみて、onScrollStateChangedをscrollState == 0で実装してください...必要なことを行ってください...

setOnScrollListener(new OnScrollListener() {
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        // TODO Auto-generated method stub
    }

    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
            Log.i("a", "scrolling stopped...");
        }
    }
});
68
Vidar Vestnes

トリックは、ユーザーがフリングしているときとフリングしていないときを追跡することです。あなたが言ったように、指でのスクロールからアイドルへの遷移は記録されないので、これはあなたができる唯一の区別についてのようです。これが私が話していることです:

public void onScrollStateChanged(AbsListView view, int scrollState) {       
    if (scrollState != OnScrollListener.SCROLL_STATE_FLING) {
        flinging = false;
        int count = view.getChildCount();

        for (int i = 0; i < count; i++) {
            View convertView = view.getChildAt(i);
            Recipe recipe = (Recipe) convertView.getTag();
            ImageView image = (ImageView) convertView.findViewById(R.id.icon);

            if (recipe != null && recipe.getImageURL() != null) {
                ImageLoader.loadImage(this, image, recipe.getImageURL());
            }
        }
    } else {
        flinging = true;
    }
}

そして、listViewアダプターで:

public View getView(int position, View convertView, ViewGroup parent) {
    // Bunch of code....

    if (!flinging) {
        ImageLoader.loadImage(BrowseRecipes.this, image, recipe.getImageURL());
    }
}

したがって、リスナーでの変更に対応する代わりに、フリングが発生しない限り、最初に画像(または集中的に行う必要があるもの)をロードするだけです。

これはすべて私のプロジェクトから取り出されます: https://github.com/pkulak/mealfire_Android

7
Phil Kulak