Android - NestedScrollView 内嵌 RecyclerView 滑动监听问题
2017-04-25 18:28
686 查看
1. 监听思路
NestedScrollView内嵌
RecyclerView时,
RecyclerView的滑动监听很大可能监听不到,所以我们只能通过对
NestedScrollView的监听进行
RecyclerView的滑动判断;
2. 基本布局
别问我为什么有这种布局,你也会遇到的;(通用布局)<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/baseSwipeRefresh" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v4.widget.NestedScrollView android:id="@+id/baseViewContent" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:scrollbars="none" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/baseViewPager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </android.support.v4.widget.NestedScrollView> </android.support.v4.widget.SwipeRefreshLayout>
这里注意 需要给
NestedScrollView添加下面属性:
android:fillViewport="true"
3. RecyclerView
初始化
//设置layoutManager LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext); // auto measure : true linearLayoutManager.setSmoothScrollbarEnabled(true); linearLayoutManager.setAutoMeasureEnabled(true); linearLayoutManager.setOrientation(VERTICAL); recyclerView.setLayoutManager(linearLayoutManager); // 设置为 true recyclerView.setHasFixedSize(true); recyclerView.setItemAnimator(new DefaultItemAnimator()); // 设置为 false recyclerView.setNestedScrollingEnabled(false);
4. NestedScrollView
滑动监听
mNestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { @Override public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { if (scrollY > oldScrollY) { // 向下滑动 } if (scrollY < oldScrollY) { // 向上滑动 } if (scrollY == 0) { // 顶部 } if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) { // 底部 } } });
5. 结语
好吧,通过对NestedScrollView的监听,对
RecyclerView的数据操作即可!
6. 题外话(一) RecyclerView
的滑动监听
简单实现RecyclerView的监听
重写滑动监听事件
/** * 重写RecyclerView.OnScrollListener 判断滑动向上,向下,顶部,底部 */ public static abstract class OnVerticalScrollListener extends RecyclerView.OnScrollListener { @Override public final void onScrolled(RecyclerView recyclerView, int dx, int dy) { LogUtil.e("ddd" + dy); if (!recyclerView.canScrollVertically(-1)) { onScrolledToTop(); } else if (!recyclerView.canScrollVertically(1)) { onScrolledToBottom(); } else if (dy < 0) { onScrolledUp(); } else if (dy > 0) { onScrolledDown(); } } //向上滑动 public void onScrolledUp() { } //向下滑动 public void onScrolledDown() { } //滑动底部 public void onScrolledToTop() { } //滑动顶部 public void onScrolledToBottom() { } }
使用
protected RecyclerView.OnScrollListener getOnScrollListener() { //上下滑动监听 return new OnVerticalScrollListener() { @Override public void onScrolledToBottom() { if (!isLoading) { page++; onLoadNextPage(page); isLoading = true; } } }; }
7. 题外话(二)RecyclerAdapter
的数据改变监听
给 adapter 注册一个观察者,执行下面notifyxxx方法的时候,会调用方法;
notifyDataSetChanged()
notifyItemChanged()
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { super.onChanged(); checkAdapterEmpty(); } @Override public void onItemRangeInserted(int positionStart, int itemCount) { super.onItemRangeInserted(positionStart, itemCount); checkAdapterEmpty(); } @Override public void onItemRangeRemoved(int positionStart, int itemCount) { super.onItemRangeRemoved(positionStart, itemCount); checkAdapterEmpty(); } });
完
相关文章推荐
- NestedScrollView 内嵌 RecyclerView 滑动监听问题
- Android之NestedScrollView 嵌套 RecyclerView 滑动冲突的问题
- 监听滑动事件和消除与内嵌recyclerview冲突的Scrollview(惯性消失问题解决)
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- Android NestedScrollView嵌套RecyclerView冲突(ReclerView监听被占据)
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- NestedScrollView嵌套RecyclerView时滑动不流畅问题的解决办法
- RecylerViewd的Item高度自适应,Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- NestedScrollView嵌套RecyclerView时滑动不流畅问题的解决办法
- android scrollView 内嵌ViewPager或Gallery等水平滑动控件冲突问题解决实现同时滑动
- 监听滑动事件和消除与内嵌recyclerview冲突的Scrollview
- Android Scrollview嵌套RecyclerView导致滑动卡顿问题解决
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- nestedScrollview 嵌套使用recyclerview判断滑动到底部 (嵌套滑动导致 不能使用recyclerview的onscrolled监听)
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- Android 解决ScrollView嵌套RecyclerView导致滑动不流畅的问题