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


156

私はこのようなxmlファイルを作成しました:

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

そして活動:

public class ExampleActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainlist);
    }
}

ご覧のとおり、私は他に何もしていません。しかし、私はエラーを得ています:

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

私が持っているにもかかわらず android:id="@+id/list"、私のxml内の行を。

何が問題ですか?

回答:


345

ListViewのIDの名前を次のように変更します。

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

ListActivityxmlファイルを使用しているので、IDについて言及するときにキーワードandroidを指定する必要があります。

カスタムが必要な場合ListViewListActivity、を拡張する代わりに、単にを拡張するActivity必要があり、キーワードandroidなしで同じIDを持つ必要があります。


4
これを行うと私の問題は解決しました、ありがとう。しかし、ListViewのIDが "@android:id / list"である必要がある場合と、任意の名前を付けても問題ない場合について、少し説明していただけると助かります。問題を修正するだけでなく、修正が必要な理由を理解したいからです。
RenniePet 2013

4
動作します。しかし、なぜビューの実装に応じてIDを持つこの「ゲーム」なのでしょうか。
2013年

1
私は追加すると@android、Eclipseは言うlist cannot be resolved or is not a field
user83039

1
同じ問題でエラーが表示されます:エラー:指定された名前に一致するリソースが見つかりませんでした(値 '@android:id / list_interestsent'の 'id'で)。

1
この素晴らしい答えをありがとう!
Brewology 2016

23

mainlist.xml次のIDを持つファイルに1つのリストビューが必要です@android:id/list

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

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

これはあなたの問題を解決するはずです


8

最初は機能させることができなかったため、上記のフィードバックに基づいてこれを修正した正確な方法:

activity_main.xml:

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

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addPreferencesFromResource(R.xml.preferences);

preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
    android:key="upgradecategory"
    android:title="Upgrade" >
    <Preference
        android:key="download"
        android:title="Get OnCall Pager Pro"
        android:summary="Touch to download the Pro Version!" />
</PreferenceCategory>
</PreferenceScreen>

4

ListActivityの代わりにアクティビティクラスを継承すると、この問題を解決できます。

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mainlist);
    }
}

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

0

私に影響を与えたもう1つのこと:複数のテストデバイスがある場合は、デバイスで使用されるレイアウトを変更していることを確認してください。私の場合、私が(layout-sw360dp)ディレクトリでxmlを使用している(テストの途中で切り替えた)大きな電話が見つかるまで、 "layout"ディレクトリのxmlに変更を加えるのにしばらく時間を費やしました。うん!

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