RuntimeException: Ваш вміст повинен мати ListView, атрибут id якого - "android.R.id.list"


87

Я отримую виняток часу роботи

java.lang.RuntimeException: Ваш вміст повинен мати ListView, атрибут id якого - "android.R.id.list"

Я не знаю, що не так.

@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
обов’язково виберіть відповідь!
Філ

що таке mDbHelper? я на тому самому човні і намагаюся змусити це спрацювати за моїм ListView ...
Нік Кан

Відповіді:


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

5
Це рішення, якщо ОП колись піклувався про вибір відповіді!
Штати

1
Чому це працює? Чому я не можу призначити будь-яке інше значення для android: id?
Vivek Pandey

1
@VivekPandey, тому що ви розширюєте ListActivity, який вимагає ListView, за допомогою android: id of list, developer.android.com/reference/android/app/ListActivity.html , zgcharley нижче це чітко пояснив
mirageservo

52

Видаліть дзвінок setContentView- він вам не потрібен у ListActivity, якщо ви не робите чогось радикального. Код повинен працювати без нього.


4
Але як Activity знає, який шаблон застосовувати, якщо ми не використовуємо setContentView ()?
ses

@ses, я вважаю, що він буде використовувати заздалегідь визначений шаблон ListView.
витягнув

26

Інший спосіб - не продовжувати ListActivity. Просто розширюється Activity, тоді ви можете створити перегляд списку до setContentView()і отримати вигляд списку до findViewById(R.id.yourlistview).

Якщо ви продовжуєте з ListActivity, то не використовуйте setContentView(). Вам потрібно отримати режим перегляду списку за замовчуванням, розміщений у списку getListView().


10

У мене була подібна проблема з отриманим вами повідомленням про помилку, і я виявив, що це тому, що я розширював ListActivity замість просто Activity (це те, що я отримую для переназначення коду з іншого проекту;))


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
я знайшов це справді корисним. дякую Барасу, що поділився цим.
Ayoub

наступне пиво на мене.
Венката Тата

1

Я також зіткнувся з цією проблемою, я розширював свій клас активності з списку списку активності, але ідентифікатор мого перегляду списку не був девальватором. Я змінив його на список і тепер він працює нормально. Асім сороя

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.