首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ScrollView + ViewPager + ListView 嵌套滑動衝突解決:放棄手動測高改用 NestedScrollView

     編輯:程式設計綜合問答

現狀問題

外層 ScrollView → ViewPager → Fragment → ListView,手動計算 ListView 高度導致失去**視圖回收機制**,首次加載所有 Item 造成卡頓、OOM 風險。

核心誤區

手動測高 ≠ 解決滑動衝突。ListView 在 ScrollView 中本質不可行(雙向滑動視圖嵌套),Android 5.0+ 提供標準解決方案。

現代解決方案

  1. 外層改用 NestedScrollView(支持嵌套滑動):
    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
    
        <ViewPager ... />
    
    </androidx.core.widget.NestedScrollView>
  2. Fragment 中用 RecyclerView 替代 ListView:
    • RecyclerView 原生支持 NestedScrollingChild,配合 NestedScrollView 完美協作。
    • 設置 recyclerView.setNestedScrollingEnabled(false) 讓外層承擔滑動,或 true 內外分工(需 CoordinatorLayout 配合)。
  3. ViewPager 設置 setNestedScrollingEnabled(true)(API 21+)。

關鍵屬性

  • android:nestedScrollingEnabled="true":聲明視圖參與嵌套滑動分發。
  • ViewCompat.setNestedScrollingEnabled(view, true):代碼動態設置。

效能提升

  • RecyclerView **ViewHolder 回收機制**完好,只創建可見項 View,內存穩定。
  • 異步加載數據(PagingSource/LiveData),首屏秒開。

**結論:棄用 ListView+手動測高,遷移到 NestedScrollView + RecyclerView,獲得原生嵌套滑動支持與高效回收。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved