一、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等編程技術的技巧經驗分享),若作品對您有幫助,請關注、分享、點贊、收藏、在看、喜歡,您的支持是我們爲您提供幫助的最大動力。
歡迎關注。助您在編程路上越走越好!