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

Я создал файл 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.

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

Ответ 1

Переименуйте идентификатор вашего ListView таким образом,

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

Поскольку вы используете ListActivity, ваш xml файл должен указывать ключевое слово android, указывая на идентификатор.

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

Ответ 2

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

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

Ответ 3

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

это должно решить вашу проблему.

Ответ 4

Точный способ я исправил это на основе обратной связи выше, так как я не мог заставить его работать сначала:

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>

Ответ 5

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

public class ExampleActivity extends Activity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mainlist);
    }
}

Ответ 6

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

Ответ 7

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