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

Android ListView 設定不可點選/不可選取

     編輯:程式設計綜合問答

需求場景

ListView 僅供顯示資料,不希望項目被點選、無選取狀態變色、無點擊回饋。

方法一:繼承 ArrayAdapter 覆寫兩個方法 (最簡單)


public class NonSelectableAdapter extends ArrayAdapter {
    public NonSelectableAdapter(Context context, int resource, List items) {
        super(context, resource, items);
    }
    
    // 關鍵:所有項目均不可啟用 (不可點選)
    @Override public boolean areAllItemsEnabled() {
        return false;
    }
    
    @Override public boolean isEnabled(int position) {
        return false;
    }
}

// 使用
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(new NonSelectableAdapter(this, R.layout.item_layout, data));

方法二:XML 佈局設定 (無需自訂 Adapter)




    android:focusable="false"        
    android:focusableInTouchMode="false"
    android:background="@android:color/transparent"> 
    
    
    

同時在 ListView XML:


 

方法三:程式碼動態設定


ListView listView = findViewById(R.id.list_view);
listView.setClickable(false);
listView.setFocusable(false);
listView.setFocusableInTouchMode(false);
listView.setSelector(new ColorDrawable(Color.TRANSPARENT)); // 移除選取效果
listView.setOnItemClickListener(null); // 移除點擊監聽

進階:部分項目可點選,部分不可


public class MixedAdapter extends ArrayAdapter {
    @Override public boolean isEnabled(int position) {
        Item item = getItem(position);
        return item != null && item.isClickable(); // 根據資料決定
    }
    
    @Override public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        if (!isEnabled(position)) {
            view.setAlpha(0.5f); // 視覺提示不可點選
            view.setClickable(false);
        } else {
            view.setAlpha(1.0f);
        }
        return view;
    }
}

RecyclerView 等效做法


// Adapter 中
@Override public void onBindViewHolder(ViewHolder holder, int position) {
    Item item = items.get(position);
    holder.bind(item);
    
    // 控制點擊
    holder.itemView.setOnClickListener(item.isClickable() ? clickListener : null);
    holder.itemView.setAlpha(item.isClickable() ? 1.0f : 0.5f);
    holder.itemView.setClickable(item.isClickable());
    holder.itemView.setFocusable(item.isClickable());
}

總結建議

  • **整體不可點選**:繼承 Adapter 覆寫 areAllItemsEnabled() + isEnabled() 最乾淨
  • **移除視覺回饋**:listSelector="@android:color/transparent" + 項目背景透明
  • **RecyclerView**:在 onBindViewHolder 中動態控制 setOnClickListener 與 setClickable
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved