嘗試用 findViewById(R.layout.activity_main.xml.id) 取得 ListView,編譯報錯或運行崩潰。XML 中 ListView 宣告 android:id="@android:id/list"。
R.layout.activity_main.xml.id 不存在,正確是 R.id.xxx。@android:id/list 是 Android 內建 ID(對應 android.R.id.list),需繼承 ListActivity 或用 android.R.id.list 才能直接取得。@+id/list 產生專案專屬 R.id.list。<ListView
android:id="@+id/myListView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
// Java/Kotlin
ListView listView = findViewById(R.id.myListView); // 導入專案的 R 類別
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = getListView(); // 直接取得 @android:id/list
// 或 findViewById(android.R.id.list);
}
}
XML 保持 android:id="@android:id/list"。
ListView listView = findViewById(android.R.id.list); // 需導入 android.R
@+id/name → 專案 R.id.name(最常用)@android:id/name → 系統 android.R.id.name(需配合 ListActivity 或明確引用)findViewById 參數必須是 R.id.xxx 或 android.R.id.xxx,絕非 R.layout.xxxR 類別包名 = applicationId(build.gradle),勿誤導入 android.R掌握 ID 命名空間與 findViewById 正確用法,是 Android 視圖綁定的基礎功力。