如何检测Android ListView滚动停止?

koj*_*lin 27 android listview scroll

我想OnScrollListener#onScrollStateChanged(SCROLL_STATE_IDLE)在滚动停止后做一些事情.所以,我尝试使用来检测滚动停止的时间(或者TOUCH_SCROLL or FLING)(在1.5时它按预期运行).但是当它在2.0上运行时,onScrollStateChanged在释放finger之后无法接收到该事件.是否有任何回调或者无论如何都要检测到该事件?

Vid*_*nes 68

尝试使用setOnScrollListener并使用scrollState == 0实现onScrollStateChanged ...做你需要做的......

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...");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 而不是硬编码等于0,使用OnScrollListener.SCROLL_STATE_IDLE如果你试图检测滚动何时停止,这将会起作用...如果你试图检测手指/投掷何时不再触摸屏幕,那将是一个不同的方法.. (23认同)

Phi*_*lak 7

诀窍是跟踪用户何时投掷以及何时投掷.看起来这是关于你可以做出的唯一区别,因为就像你说的那样,没有记录从手指滚动到空闲的过渡.这就是我在说的:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在listView适配器中:

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

    if (!flinging) {
        ImageLoader.loadImage(BrowseRecipes.this, image, recipe.getImageURL());
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,只要不进行任何投掷,只需加载图像(或任何你需要做的密集),而不是对听众的变化作出反应.

这完全取决于我的项目:https://github.com/pkulak/mealfire_android