Otrzymuję wyjątek czasu wykonywania
java.lang.RuntimeException: Twoja treść musi mieć ListView, którego atrybut id to „android.R.id.list”
Nie wiem, co się stało.
@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>
Odpowiedzi:
<ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
To rozwiąże błąd, jeśli nadal chcesz używać ListActivity.
źródło
android:id="@+id/android:list"
jeśli to nie działa. Twoja klasa musi nadal rozszerzać ListActivity i zamiast robićListView yourListView = (ListView)findViewById(R.id.yourListView);
to, aby zainicjowaćListView yourListView = getListView();
Usuń wywołanie
setContentView
- nie potrzebujesz go w ListActivity, chyba że robisz coś radykalnego. Kod powinien działać bez niego.źródło
Innym sposobem jest, nie przedłużaj
ListActivity
. Po prostu rozszerzaActivity
, a następnie możesz utworzyć widok listy wedługsetContentView()
i uzyskać widok listy wedługfindViewById(R.id.yourlistview)
.Jeśli rozszerzasz się z
ListActivity
, nie używajsetContentView()
. Musisz uzyskać domyślny widok listy obsługiwany w aktywności listy przezgetListView()
.źródło
Miałem podobny problem z komunikatem o błędzie, który otrzymałeś i stwierdziłem, że to dlatego, że rozszerzałem ListActivity zamiast tylko Activity (to jest to, co otrzymuję za ponowne przeznaczenie kodu z innego projektu;))
źródło
<ListView android:id="@id/android:list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="false" android:scrollbars="vertical"/>
źródło
Ja też tak wyglądam. W moim przypadku (może nie dotyczy Twojego przypadku, po prostu udostępnij innym) w klasie
mainActivity.java
yourClassName extends ListActivity(){...}
zmień nayourClassName extends Activity(){...}
źródło
Miałem również do czynienia z tym problemem, rozszerzałem swoją klasę aktywności z listactivity, ale identyfikator mojego widoku listy nie był domyślny. Zmieniłem go z powrotem na listę i teraz działa dobrze. Asim soroya
źródło