Ваш контент должен иметь ListView, чей атрибут id равен android.R.id.list

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);
    }
}

Как видите, я больше ничего не делал. Но я получаю ошибку:

Ваш контент должен иметь ListView, чей атрибут id равен android.R.id.list

Хотя у меня есть android:id="@+id/list"строка в моем XML.

В чем проблема?

Иса Куру
источник

Ответы:

345

Переименуйте идентификатор вашего ListView следующим образом:

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

Поскольку вы используете ListActivityсвой XML-файл, необходимо указать ключевое слово android при упоминании идентификатора.

Если вам нужен кастом, ListViewтогда вместо расширения a ListActivity, вы должны просто расширить Activityи иметь тот же идентификатор без ключевого слова android .

Андро Сельва
источник
4
Это помогло решить мою проблему, спасибо. Но мне интересно, не могли бы вы написать несколько слов объяснения о том, когда ListView должен иметь идентификатор «@android: id / list», и когда можно использовать произвольное имя. Это потому, что мне нравится не только исправлять мою проблему, но и понимать, зачем это нужно.
RenniePet
4
Работает. Но почему это «игры» с id в зависимости от вида impl?
ses
1
Когда я добавляю @android, Eclipse говоритlist cannot be resolved or is not a field
user83039
1
та же проблема, она показывает ошибку: Ошибка: не найден ресурс, который соответствует данному имени (в 'id' со значением '@android: id / list_interestsent').
1
Спасибо за этот отличный ответ!
Brewology
23

В вашем mainlist.xmlфайле должен быть один просмотр списка с идентификатором как@android:id/list

<ListView
    android:id="@android:id/list"
    android:layout_height="wrap_content"
    android:layout_height="fill_parent"/>
Praveenkumar
источник
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>
Kevin
источник
4

Унаследовать класс активности вместо ListActivity вы можете решить эту проблему.

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mainlist);
    }
}
Vicky
источник
1
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>
Makvin
источник
0

Еще одна вещь, которая затронула меня: если у вас есть несколько тестовых устройств, убедитесь, что вы вносите изменения в макет, используемый устройством. В моем случае я потратил некоторое время на внесение изменений в xmls в каталоге «layout», пока не обнаружил, что мой больший телефон (который я переключил на половину процесса тестирования) использует xmls в каталоге «layout-sw360dp». Хмм!

RudyF
источник