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

Android findViewById 找不到 ListView:ID 寫法錯誤解析

     編輯:程式設計綜合問答

問題現象

嘗試用 findViewById(R.layout.activity_main.xml.id) 取得 ListView,編譯報錯或運行崩潰。XML 中 ListView 宣告 android:id="@android:id/list"。

錯誤分析

  1. findViewById 參數錯誤:R.layout.activity_main.xml.id 不存在,正確是 R.id.xxx。
  2. 系統 ID vs 自定義 ID:@android:id/list 是 Android 內建 ID(對應 android.R.id.list),需繼承 ListActivity 或用 android.R.id.list 才能直接取得。
  3. 自定義 ID 寫法:應用 @+id/list 產生專案專屬 R.id.list。

正確做法

方法一:使用自定義 ID(通用,推薦)

<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
// Java/Kotlin
ListView listView = findViewById(R.id.myListView);  // 導入專案的 R 類別

方法二:繼承 ListActivity 使用系統 ID

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"。

方法三:一般 Activity 用系統 ID

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.xxx
  • 專案 R 類別包名 = applicationId(build.gradle),勿誤導入 android.R

掌握 ID 命名空間與 findViewById 正確用法,是 Android 視圖綁定的基礎功力。

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