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])) { ... }
}
});
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 參數,簡單高效。getItemId() 返回穩定 ID,配合 id 參數使用。list.getItemAtPosition(position).equals(...) 比較內容,既低效又易因對象引用/內容變化失效。