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

Android ListView 嵌套 GridView 滑動衝突解決:禁用內層滑動

     編輯:程式設計疑難解答

問題現象

ListView 項目中包含 GridView,單項選擇需保存狀態。但 GridView 自身可滑動,導致外層 ListView 滑動事件被攔截,體驗極差。

核心解決方案

禁用 GridView 的滑動,使其僅作為靜態佈局容器展示固定數量項目:

gridView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true; // 消費觸摸事件,禁止滑動
    }
});

或繼承 GridView 重寫 onTouchEvent 返回 true。

狀態保存策略

  • 在 Adapter 的 getView 中根據數據模型設置選中狀態(如 setChecked、背景色)。
  • 點擊事件中更新數據模型并 notifyDataSetChanged()。

替代方案

  • 若 GridView 內容較多需滑動,請改用 RecyclerView + GridLayoutManager 作為外層列表的 Item,利用 NestedScrolling 機制協調滑動。
  • 或將二維數據扁平化,直接用單層 RecyclerView 實現分組展示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved