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

Android ListView 項目點擊跳轉:使用 onListItemClick 取得 position 傳遞 Intent

     編輯:程式設計綜合問答

問題現象

使用 ArrayAdapter 顯示 String[] 資料,需點擊項目啟動對應 Activity,但項目無 ID,不知如何建立對應關係。

標準解法:覆寫 onListItemClick

繼承 ListActivity 或在 Fragment/Activity 中設定 OnItemClickListener,利用 position 參數決定跳轉目標。

ListActivity 寫法

public class FoodListActivity extends ListActivity {
    private static final String[] FOODS = {"Salads", "Sandwiches", "Drinks"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<>(this, R.layout.rowlayout, R.id.label, FOODS));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        Intent intent;
        switch (position) {
            case 0: intent = new Intent(this, SaladActivity.class); break;
            case 1: intent = new Intent(this, SandwichActivity.class); break;
            case 2: intent = new Intent(this, DrinkActivity.class); break;
            default: return;
        }
        startActivity(intent);
    }
}

一般 Activity + ListView 寫法

ListView listView = findViewById(R.id.listView);
listView.setAdapter(new ArrayAdapter<>(this, R.layout.rowlayout, R.id.label, FOODS));
listView.setOnItemClickListener((parent, view, position, id) -> {
    Intent intent;
    switch (position) {
        case 0: intent = new Intent(this, SaladActivity.class); break;
        case 1: intent = new Intent(this, SandwichActivity.class); break;
        case 2: intent = new Intent(this, DrinkActivity.class); break;
        default: return;
    }
    startActivity(intent);
});

進階:資料驅動避免硬編碼

將目標 Activity 類別與資料綁定,新增項目只需修改資料來源:

// 資料模型
data class FoodItem(val name: String, val targetActivity: Class)

private val FOODS = listOf(
    FoodItem("Salads", SaladActivity::class.java),
    FoodItem("Sandwiches", SandwichActivity::class.java),
    FoodItem("Drinks", DrinkActivity::class.java)
)

// Adapter 只顯示 name
// 點擊時
val item = FOODS[position]
startActivity(Intent(this, item.targetActivity))

傳遞額外資料

intent.putExtra("food_name", FOODS[position].name);
// 或傳遞完整物件(需實作 Parcelable/Serializable)
intent.putExtra("food_item", FOODS[position]);

關鍵點

  • position 是項目在 Adapter 中的索引(0-based),直接對應資料來源陣列/列表。
  • 不需項目擁有 ID,position 即是隱性識別碼。
  • 善用 switch、Map 或資料模型綁定目標,避免散落的 if-else。

掌握 position 與資料來源的對應關係,是 ListView/RecyclerView 點擊跳轉的核心功力。

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