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

Android ListView 程式碼設定項目選中高亮:setSelection 與 Selector 機制

     編輯:程式設計綜合問答

ListView.setSelection(position) 僅捲動使指定位置可見,不會 觸發項目選中高亮。真正的選中高亮需結合 setItemChecked、choiceMode 與 Selector 背景。

正確實作步驟

1. 佈局設定 choiceMode


 

2. 項目佈局使用 Selector 背景




    android:textSize="16sp" />

3. 程式碼設定選中


ListView listView = findViewById(R.id.calendarList);
listView.setAdapter(adapter);

// 程式碼選中第 2 項(索引 2)
int position = 2;
listView.setItemChecked(position, true); // 關鍵:設定選中狀態
listView.setSelection(position); // 輔助:捲動至可見區域

自訂 Selector 背景(完整控制)




    
    
    
    




OnItemClickListener 中處理高亮(替代方案)


listView.setOnItemClickListener((parent, view, position, id) -> {
    // 清除舊選中(單選模式下自動處理,多選需手動)
    for (int i = 0; i < parent.getCount(); i++) {
        if (i != position) parent.setItemChecked(i, false);
    }
    parent.setItemChecked(position, true);
    
    // 取得焦點以顯示 focused 狀態
    view.requestFocus();
    
    // 處理業務邏輯
});

關鍵屬性對照

屬性/方法作用備註
choiceMode單選/多選/無singleChoice, multipleChoice, none
setItemChecked(pos, true)程式碼設定選中觸發 state_activated
setSelection(pos)捲動至位置不影響選中狀態
activatedBackgroundIndicator系統預設選中背景API 11+
Selector自訂 pressed/focused/activated 背景最靈活

RecyclerView 替代方案


// Adapter 中
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.itemView.setActivated(position == selectedPosition);
    holder.itemView.setOnClickListener(v -> {
        int old = selectedPosition;
        selectedPosition = holder.getAdapterPosition();
        notifyItemChanged(old);
        notifyItemChanged(selectedPosition);
    });
}

理解 setSelection 僅負責捲動、選中高亮靠 choiceMode + setItemChecked + Selector,即能正確實現列表項目高亮。

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