嵌套滑动解决之法

程序员小迷 2024-05-06 11:35:18

一、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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

0 阅读:4

程序员小迷

简介:致力于Android、iOS、C、Java等编程技术的技巧经验分享