如何在列表视图上绑定多个Scroll侦听器?

时间:2014-09-12 15:12:15

标签: android listview listener

我想用Sticky Section Header和一个浮动动作按钮创建一个listview。

我为此使用2个库(StickyListHeaders和FloatingActionButton),但是他们需要将滚动侦听器绑定到listview才能工作。问题是listview上只能有一个滚动监听器。

如何在列表视图中使用2个滚动侦听器?

1 个答案:

答案 0 :(得分:8)

组合滚动侦听器列表并只使一个侦听器通知所有这些是您的请求的非常简单的解决方案。

注意:如果您打算从OnScrollListener覆盖MultiScrollListener的方法,请务必进行super来电

import android.widget.AbsListView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by nikola on 9/12/14.
 */
public class MultiScrollListener implements AbsListView.OnScrollListener {
    List<AbsListView.OnScrollListener> mListeners = new ArrayList<AbsListView.OnScrollListener>();
    public void addScrollListener(AbsListView.OnScrollListener listener){
        mListeners.add(listener);
    }
    public void removeListener(AbsListView.OnScrollListener listener){
        mListeners.remove(listener);
    }
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        for(AbsListView.OnScrollListener listener: mListeners){
            listener.onScrollStateChanged(view,scrollState);
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        for(AbsListView.OnScrollListener listener: mListeners){
            listener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
        }
    }
}

用法:

MultiScrollListener scrolls = new MultiScrollListener();
scrolls.addScrollListener(scroll1);
scrolls.addScrollListener(scroll2);
mListView.setOnScrollListener(scrolls);