RecyclerView常见的问题以及解决方案
2018-01-10 21:50
411 查看
2018第一个星期过了,第一篇博客东拼西凑出来了,之前的博客一直都是东拼西凑总结别人的内容,我暂时没有什么原创,就记录一下平时开发中遇到的问题吧,也算是进步的开始了。
以下详细描述问题以及解决方法:
三个参数
root不为null,attachToRoot为true:表示将resource指定的布局添加到root中,添加的过程中resource所指定的的布局的根节点的各个属性都是有效的.如下代码,最后不需要add方法就能加入布局(且不能使用add再添加,否则报错)
root不为null,attachToRoot为false:表示不将resource指定的布局添加到root中,但是resource指定的布局的根布局的布局参数LayoutParams有效。(root会协助resource指定的布局的根节点生成布局参数)
root为null:不需要将resource指定的布局添加到任何容器中,也不需要协助生成布局参数。此时attachToRoot为false或true效果都一样
两个参数
root不为null,同上attachToRoot为true的情况
root为null,同上root为null的情况
详细案例请参考http://blog.csdn.net/u012702547/article/details/52628453
解决方案:
在RecyclerView.Adapter中onCreateViewHolder创建布局时采用以下方法:
①该方案适用于嵌套的有多个RecyclerView
②该方案只适合嵌套的只有一个RecyclerView
RecyclerView.canScrollVertically(1)的值表示是否能向上滚动,false表示已经滚动到底部
RecyclerView.canScrollVertically(-1)的值表示是否能向下滚动,false表示已经滚动到顶部
以下详细描述问题以及解决方法:
1.ScrollView中嵌套RecyclerView时会导致RecyclerView中item的布局显示不完整,或者设置的长宽参数失效
这个问题主要是由于inflate方法参数不正确引起的。LayoutInflate.inflate()方法概述如下:三个参数
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)主要分为三种情况:
root不为null,attachToRoot为true:表示将resource指定的布局添加到root中,添加的过程中resource所指定的的布局的根节点的各个属性都是有效的.如下代码,最后不需要add方法就能加入布局(且不能使用add再添加,否则报错)
LinearLayout ll = (LinearLayout) findViewById(R.id.ll); LayoutInflater inflater = LayoutInflater.from(this); inflater.inflate(R.layout.linearlayout, ll,true);
root不为null,attachToRoot为false:表示不将resource指定的布局添加到root中,但是resource指定的布局的根布局的布局参数LayoutParams有效。(root会协助resource指定的布局的根节点生成布局参数)
root为null:不需要将resource指定的布局添加到任何容器中,也不需要协助生成布局参数。此时attachToRoot为false或true效果都一样
两个参数
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root)主要分为两种情况:
root不为null,同上attachToRoot为true的情况
root为null,同上root为null的情况
详细案例请参考http://blog.csdn.net/u012702547/article/details/52628453
解决方案:
在RecyclerView.Adapter中onCreateViewHolder创建布局时采用以下方法:
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_rent_car_list , parent,false);
2.RecyclerView将指定position位置的item移到顶部
index为要移到的position值,是从RecyclerView的item位置开始的,不是从可见位置开始。这样跳转比较生硬,可以采用弹性滑动,以后有时间弄弄llManager.scrollToPositionWithOffset(index,0);
3.顶部的Banner处于无限轮播状态,RecyclerView往下滑时,Banner可能被回收了,再滑回顶部时可能又重创了Banner,导致Banner轮播错乱(应该是起了多个线程去延时更新Banner)
主要是由于Banner内部的线程没有停止。因此要在BannerView的以下三个方法中停止线程轮播:@Override protected void onAttachedToWindow() { super.onAttachedToWindow(); // 开始轮播 } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); // 停止轮播 } @Override protected void onWindowVisibilityChanged(int visibility) { if (visibility == GONE) { // 停止轮播 } else if (visibility == VISIBLE) { // 开始轮播 } super.onWindowVisibilityChanged(visibility); }
4.RecyclerView或者ScrollView嵌套RecyclerView,导致页面切换后总是自动滑动到嵌套着的RecyclerView的顶部Item位置。
原因:RecyclerView默认会获取焦点,所以解决方法有多种,可以让其他的控件获取焦点,或者不允许RecyclerView获取到焦点。以下提供两种解决方案,亲测有效。①该方案适用于嵌套的有多个RecyclerView
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:overScrollMode="never"/> </RelativeLayout>
②该方案只适合嵌套的只有一个RecyclerView
carInfoViewHolder.recyclerView.setFocusableInTouchMode(false); carInfoViewHolder.recyclerView.requestFocus();
5.判断RecyclerView滑动到底部,再进行其他操作。
解决代码如下。需要注意一点,在ACTION_UP中进行判断。其中:RecyclerView.canScrollVertically(1)的值表示是否能向上滚动,false表示已经滚动到底部
RecyclerView.canScrollVertically(-1)的值表示是否能向下滚动,false表示已经滚动到顶部
recyclerView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { float y = 0; switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: y = motionEvent.getRawY(); break; case MotionEvent.ACTION_UP: float scrollY = motionEvent.getRawY(); if(Math.abs(scrollY-y)>20){ if(!recyclerView.canScrollVertically(1)){ gotoPager(CarCenterFragment.class,null); } } break; } return false; } });
相关文章推荐
- [置顶] RecyclerView常见问题解决方案,RecyclerView嵌套自动滚动,RecyclerView 高度设置wrap_content 无作用等问题
- WebView常见问题汇总以及解决方案
- RecyclerView常见问题解决方案,RecyclerView嵌套自动滚动,RecyclerView 高度设置wrap_content 无作用等问题
- 【微信小程序常见问题】view标签设置背景图片手机无法预览解决方案二
- numpy常见问题以及解决方案
- Android WebView常见问题解决方案汇总
- Android WebView常见问题及解决方案
- Android Webview常见问题及解决方案
- Hadoop YARN常见问题以及解决方案
- Hadoop YARN常见问题以及解决方案
- SpringMVC项目中常见问题以及解决方案
- Android WebView常见问题解决方案汇总
- Ubuntu常见问题以及解决方案(长期更新)
- Android 6.0+ RecyclerView嵌套在ScrollView显示不全以及Android 7.0+ PopupWindow位置显示不对的问题解决
- Flask常见问题以及解决方案
- Oracle 常见问题以及解决方案
- Hadoop YARN常见问题以及解决方案
- Spring Boot 常见问题以及解决方案
- bootstrap常用功能快速入门以及常见问题解决方案
- Android WebView常见问题及解决方案汇总