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

Android ListView 針對特定 Item 設置點擊事件的正確做法

     編輯:程式設計綜合問答

錯誤代碼分析


list.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        // 錯誤 1:所有位置啟動同一 Activity
        Intent i = new Intent(MainActivity.this, Activity2.class);
        startActivity(i);

        // 錯誤 2:比較對象而非位置/ID
        if (list.getItemAtPosition(position).equals(mStrings[0])) { ... }
    }
});

正確模式:利用 position 參數分發

onItemClick 的第三個參數 position 直接給出被點擊項目的索引(0 起始),無需再次查詢。


list.setOnItemClickListener((parent, view, position, id) -> {
    Intent intent;
    switch (position) {
        case 0:
            intent = new Intent(MainActivity.this, ActivityA.class);
            break;
        case 1:
            intent = new Intent(MainActivity.this, ActivityB.class);
            break;
        case 2:
            intent = new Intent(MainActivity.this, ActivityC.class);
            break;
        default:
            return; // 無對應處理
    }
    startActivity(intent);
});

進階:基於數據模型分發(推薦)

若列表數據為對象列表,直接從 Adapter 獲取對象:


// 假設 Adapter 為 ArrayAdapter 或自定義 BaseAdapter
list.setOnItemClickListener((parent, view, position, id) -> {
    Item item = (Item) parent.getAdapter().getItem(position);
    if (item == null) return;

    // 根據業務字段決定跳轉
    Intent intent = new Intent(MainActivity.this, DetailActivity.class);
    intent.putExtra("item_id", item.getId());
    intent.putExtra("item_type", item.getType());
    startActivity(intent);
});

動態列表(增刪項目)的穩健寫法

使用 id 參數(對應 Adapter.getItemId(position)),若數據有穩定唯一 ID:


@Override
public long getItemId(int position) {
    return items.get(position).getServerId(); // 返回長整型唯一 ID
}

// 點擊監聽
list.setOnItemClickListener((parent, view, position, id) -> {
    // id 即為項目唯一標識,不受位置變動影響
    navigateToDetail(id);
});

總結

  • 直接使用 position 參數,簡單高效。
  • 優先從 Adapter 獲取數據對象,根據業務屬性路由,避免硬編碼索引。
  • 動態列表務必實現 getItemId() 返回穩定 ID,配合 id 參數使用。
  • 不要用 list.getItemAtPosition(position).equals(...) 比較內容,既低效又易因對象引用/內容變化失效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved