RuntimeException:コンテンツには、id属性が「android.R.id.list」であるListViewが必要です


87

ランタイム例外が発生します

java.lang.RuntimeException:コンテンツには、id属性が「android.R.id.list」であるListViewが必要です

何が悪いのかわかりません。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newslist);
    mDbHelper.open();
    fillData();
}

private void fillData() {
    Bundle extras = getIntent().getExtras();
    long catID = extras.getLong("cat_id");
    Cursor c = mDbHelper.fetchNews(catID);
    startManagingCursor(c);

    String[] from = new String[] { DBHelper.KEY_TITLE };
    int[] to = new int[] { R.id.newslist_text };

    SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.text_newslist, c, from, to);
    setListAdapter(notes);
}

newslist.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content">
    <ListView 
         android:id="@+id/catnewslist"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content">
    </ListView>
</LinearLayout>

text_newslist.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView 
        android:text="@+id/newslist_text"
        android:id="@+id/newslist_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">    
    </TextView>
</LinearLayout>

15
必ず回答を選択してください!
Phil

mDbHelperとは何ですか?私は同じボートに乗っていて、それを私のリストビューで動作させようとしています...
Nick Kahn

回答:


188
<ListView android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

ListActivityを使用したい場合は、これでエラーが解決します。


48
別のフォーマットを使用するandroid:id="@+id/android:list" 必要があり、それが機能しない場合は試してください。クラスは引き続きListActivityを拡張する必要があり、ListView yourListView = (ListView)findViewById(R.id.yourListView);初期化するためにこれを行う代わりにListView yourListView = getListView();
CQM

@CQMはここにこの動作のパターンの種類がありますか?
Rui Carneiro、2012

5
これがソリューションであり、OPがこれまでに答えを選択することに関心を持っていた場合、
米国

1
なぜこれが機能するのですか?android:idに他の値を割り当てられないのはなぜですか?
Vivek Pandey 2014

1
@VivekPandey、リストのandroid:idを使用したListViewを必要とするListActivityを拡張しているため、下記のdeveloper.android.com/reference/android/app/ListActivity.html、zgcharleyが明確に説明
mirageservo

52

呼び出しを削除しますsetContentView-急進的なことをしているのでなければ、ListActivityでそれを必要としません。コードはそれなしで動作するはずです。


4
しかし、setContentView()を使用しない場合、Activityはどのテンプレートを適用すべきかをどのようにして知るのでしょうか?
2013年

@ses、事前定義されたListViewテンプレートを使用すると思います。
craned

26

別の方法は、拡張しないことListActivityです。拡張するだけでActivity、リストビューを作成してsetContentView()取得できますfindViewById(R.id.yourlistview)

から拡張する場合はListActivity、を使用しないでくださいsetContentView()。によってリストアクティビティでホストされるデフォルトのリストビューを取得する必要がありますgetListView()


10

受け取ったエラーメッセージに同様の問題があり、ActivityだけでなくListActivityを拡張していることが原因であることがわかりました(これは、別のプロジェクトからコードを転用するために得られるものです;))


6
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>

3

私もこのような顔をしています。私の場合(たぶんあなたのケースには関係ないかもしれません、他の人と共有してください)クラスのmainActivity.java yourClassName extends ListActivity(){...}変更yourClassName extends Activity(){...}


1
これは本当に便利だと思いました。これを共有してくれたBarasに感謝します。
Ayoub 2017

次のビールは私にあります。
Venkata Tata

1

私もこの問題に直面しました。アクティビティクラスをlistactivityから拡張していましたが、リストビューのIDはデフォルトではなかったため、リストに戻し、正常に機能します。Asim soroya

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.