android.view.View.OnClickListener; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener android.widget.SimpleAdapter; import android.widget.Toast; public class MoreDateListActivity extends Activity implements OnScrollListener scrollState) { // 滑究竟部后自己主动载入,推断listview已经停止滚动而且最后可视的条目等于adapter的条目 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE 同一时候listview绑定了onScrollListener监听器。而且实现了onScroll和onScrollStateChanged方法。 在后者方法中。
1、OnScrollListener滑动事件监听抽象类 这个抽象类是我们要实现下拉刷新,上拉加载的关键,其中有onScrollStateChanged 、onScrolled两个方法 onScrollStateChanged /** * An OnScrollListener can be added to a RecyclerView to receive messages when a scrolling event () * */ public abstract static class OnScrollListener { /** * Callback 完整的自定义RecyclerView.OnScrollListener代码如下: public class RecyclerViewOnScrollListener extends RecyclerView.OnScrollListener listener) 方法实现列表滑动事件的监听,传入的对象为OnScrollListener; 2)用自定义的RecyclerView.OnScrollListener写一个自己业务处理的监听器,eg
onScrollListener; public MyScrollView(Context context) { this(context, null); } public int defStyle) { super(context, attrs, defStyle); } /** * 设置滚动接口 * @param onScrollListener */ public void setOnScrollListener(OnScrollListener onScrollListener) { this.onScrollListener = null){ onScrollListener.onScroll(t); } } /** * * 滚动的回调接口 * * @author xiaanming * */ public interface OnScrollListener{
前置知识 监听 RecyclerView 滚动状态 调用 recyclerView.addOnScrollListener(onScrollListener); 来设置 RecyclerView 的滚动监听器 自定义一个类来继承 RecyclerView.OnScrollListener 并覆写 onScrollStateChanged() 方法,在其中处理关键状态的监听。 private class MOnScrollListener extends RecyclerView.OnScrollListener { @Override public void onScrollStateChanged linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView.setLayoutManager(linearLayoutManager); onScrollListener = new MOnScrollListener(); recyclerView.addOnScrollListener(onScrollListener); int lastPositionHistory
android.view.ViewConfiguration; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener 自定义下拉刷新上拉加载控件 目前只支持ListView */ public class CustomSwipeRefreshLayout extends SwipeRefreshLayout implements OnScrollListener ListView mListView; // 上拉监听器, 到了最底部的上拉加载操作 private OnLoadListener mOnLoadListener; private OnScrollListener 加载更多的监听器 public interface OnLoadListener { void onLoad(); } public interface OnScrollListener onScrollListener) { this.mOnScrollListener = onScrollListener; } public void setOnScrollStateChangeListener
下面是RecyclerView 自定义视图里面用到的一个onLayout()方法: public class MyRecyclerView extends RecyclerView implements OnScrollListener public MyRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); //implements OnScrollListener mItemScrollChangeListener.onChange(mCurrentView,getChildPosition(mCurrentView)); } } /** * implements OnScrollListener 必须要重载的方法 */ @Override public void onScrollStateChanged(int arg0) { } /** * implements OnScrollListener
public class PullFreshListView extends ListView implements OnScrollListener { private float mLastY = -1; private Scroller mScroller; private OnScrollListener mScrollListener; private ListViewPlusListener ; } super.computeScroll(); } @Override public void setOnScrollListener(OnScrollListener mRecycleSection; private PinnedSection mPinnedSection; private int mTranslateY; private final OnScrollListener mOnScrollListener = new OnScrollListener() { @Override public void onScrollStateChanged
mSwipeListView.setOnScrollListener(new OnScrollListener() { @Overridepublic void onScrollStateChanged (AbsListView arg0, int arg1) { // TODO 自动生成的方法存根 if (arg1 == OnScrollListener.SCROLL_STATE_IDLE
private int mScrollState = OnScrollListener.SCROLL_STATE_IDLE; public NumberPickerView(Context context mScroller.isFinished()){ if(mScrollState == OnScrollListener.SCROLL_STATE_IDLE = 0){//need to adjust if(mScrollState == OnScrollListener.SCROLL_STATE_IDLE ){ onScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL wrapSelectorWheel) { if(mScrollState == OnScrollListener.SCROLL_STATE_IDLE){
监听列表滚动状态 第一个想到的方案是监听列表滚动状态,当列表快滚动到底部时执行预加载,RecyclerView.OnScrollListener提供了两个回调: public class RecyclerView { public abstract static class OnScrollListener { public void onScrollStateChanged(@NonNull onPreload: () -> Unit) { // 监听 RecyclerView 滚动状态 addOnScrollListener(object : RecyclerView.OnScrollListener onAttachedToRecyclerView(recyclerView: RecyclerView) { recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener
实现步骤:调用ListView的setOnScrollListener()方法设置滑动监听器,实现OnScrollListener接口的方法,判断当列表滑动到最低端时,加载新的列表项。 其中OnScrollListener接口需要实现如下两个方法: onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount mAdapter); 42 //给ListView添加滚动监听器 43 mListView.setOnScrollListener(new AbsListView.OnScrollListener = AbsListView.OnScrollListener.SCROLL_STATE_IDLE 59 && lastVisibleItem == totalItemCount
每一种ListView下拉刷新的开源框架,基本功能相同,设计原理大同小异,下拉刷新的功能实现,其中一个设计实现的的方案核心要点大多集中在ListView的OnScrollListener()等事件的重写上 其中,firstVisibleItem , visibleItemCount , totalItemCount 的值可从ListView的OnScrollListener中获得更新。 B:设计原理之实现: (第1步)给ListView setOnScrollListener,重写该ListView中OnScrollListener的onScroll方法,目的是实时更新firstVisibleItem // 之所以用GestureDetector而不完全依赖ListView.OnScrollListener,主要是因为当ListView在0个元素,或者当数据元素不多不足以多屏幕滚动显示时候(换句话说, 正常情况假设一屏可以显示15个,但ListView只有3个元素,那么ListView下方就会剩余空出很多空白空间,在此空间上的事件不触发ListView.OnScrollListener)。
实现OnScrollListener:在RecyclerView中添加OnScrollListener,监听滑动事件。 加载数据:在滑动事件中,根据预加载阈值提前加载数据。 示例代码: recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled
iv.setBackgroundResource(R.drawable.img_pic); } } }; // 实现类而且需要实现OnScrollListener method stub if (lodingView) { switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_FLING : syncImageLoader.lock(); break; case AbsListView.OnScrollListener.SCROLL_STATE_IDLE : loadImage(); break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL
RecyclerView的滚动事件OnScrollListener研究 http://www.open-open.com/lib/view/open1477623086381.html 滚动参数 http InputMethodManager.HIDE_NOT_ALWAYS); } } } mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener
com.example.zhy_horizontalscrollview03.MyRecyclerView public class MyRecyclerView extends RecyclerView implements OnScrollListener public MyRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); //implements OnScrollListener mItemScrollChangeListener.onChange(mCurrentView,getChildPosition(mCurrentView)); } } /** * implements OnScrollListener 必须要重载的方法 */ @Override public void onScrollStateChanged(int arg0) { } /** * implements OnScrollListener
* * @param l the scroll listener */ public void setOnScrollListener(OnScrollListener l) { mOnScrollListener = l; invokeOnItemScrollListener(); } } 其中,OnScrollListener 的接口为: public class AbsListView{ public interface OnScrollListener { .... /** * Callback AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount); } } 从OnScrollListener
(); mTouchMode = TOUCH_MODE_SCROLL; reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL mFlingRunnable = new FlingRunnable(); } reportScrollStateChange(OnScrollListener.SCROLL_STATE_FLING } else { mTouchMode = TOUCH_MODE_REST; reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE
listview滑动.gif mLv.setOnScrollListener(new AbsListView.OnScrollListener() { /** visibleItemCount, int totalItemCount) { } }); 2.onScroll:android.widget.AbsListView.OnScrollListener * 是否滑到最顶端 */ private boolean mIsTopItem; mLv.setOnScrollListener(new AbsListView.OnScrollListener
SwipeRefreshLayout设置监听器实现的 mSwipeRfl.setOnRefreshListener(mRefreshListener); 3)加载更多是通过监听RecycleView的OnScrollListener mScrollListener = new RecyclerView.OnScrollListener() { private int mLastVisibleItem; private private OnRefreshListener mRefreshListener; /** * 内容控件滚动监听 */ private RecyclerView.OnScrollListener (layoutParams); } private void initListener() { mScrollListener = new RecyclerView.OnScrollListener