嵌套滑動解決之法

程序員小迷 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、C等編程技術的技巧經驗分享