В вашем контенте должен быть 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.

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

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

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

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

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

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

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

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

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

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> 

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

 public class ExampleActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainlist); } } 

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