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

Android ListActivity 繼承導致 RuntimeException 異常解析

     編輯:程式設計綜合問答

異常現象

繼承 ListActivity 卻在佈局中使用自定義 ID 的 ListView(如 @+id/listView1),運行時拋出:

java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

錯誤代碼

public class InstalledApps extends ListActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.applist); // 佈局中 ListView id 為 @+id/listView1
        listview = (ListView) findViewById(R.id.listView1);
        // ...
    }
}

解決方案

方案一:改繼承 Activity(推薦)

public class InstalledApps extends Activity {
    // 代碼其餘部分不變
}

方案二:佈局中使用系統預期 ID

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

原理解析

ListActivity 內部默認查找 android.R.id.list 作為列表視圖,若佈局中無此 ID 會拋出異常。改繼承 Activity 可自由控制 ListView ID,更靈活。

總結

除非佈局中使用系統預設 ID,否則建議繼承 Activity 而非 ListActivity,避免不必要的約束。

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