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 есть какой-нибудь образец такого поведения?
Руи Карнейро
5
Это решение, если OP когда-либо хотел выбрать ответ!
Штаты
1
Почему это работает? Почему я не могу присвоить android: id другое значение?
Вивек Пандей
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().

Zgcharley
источник
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
я нашел это действительно полезным. спасибо Барасу за то, что поделился этим.
Аюб
следующее пиво на мне.
Venkata Tata
1

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

Асим Сороя
источник