一、ScrollView/NestedScrollView中嵌套RecyclerView时滑动异常的解决方案:
1.竖向滑动的RecyclerView重写canScrollVertically()方法,水平滑动的RecyclerView重写canScrollHorizontally方法。
recyclerView.setLayoutManager(new LinearLayoutManager(this){
@Override
public boolean canScrollVertically() {
//解决ScrollView里存在多个RecyclerView时滑动卡顿的问题
return false;
}
});
2.解决数据加载不完的问题。
recyclerView.setNestedScrollingEnabled(false);
3.解决数据加载完成后, 没有停留在顶部的问题。
recyclerView.setFocusable(false);
4.若以上解决方案仍未解决,则将RecyclerView外层的ScrollView替换成NestedScrollView就可以了。
二、当ScrollView/NestedScrollView中嵌套ListView或GridView时滑动异常的解决方案:
1.ListView或GridView的内容无法全部显示(ListView和GridView现象一样)。
解决方案为自定义该控件(以GridView为例,ListView类似),使ListView或GridView高度全部显示:
public MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
/**
* 重写该方法,使GridView 高度全部显示以适应ScrollView的效果
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//最大高度设为一个极大值,保证高度全部显示
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
2.若出现数据加载完页面没有停留在顶部的问题,解决方案是让控件失去焦点。
//必须在控件初始化后设置, 不能写在xml的布局文件中,否则不起作用。
gridView.setFocusable(false);
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!