RuntimeException: su contenido debe tener un ListView cuyo atributo de identificación sea 'android.R.id.list'

87

Obtengo una excepción de tiempo de ejecución

java.lang.RuntimeException: su contenido debe tener un ListView cuyo atributo de identificación sea 'android.R.id.list'

No se que esta mal.

@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>
raji
fuente
15
¡asegúrese de seleccionar una respuesta!
Phil
¿Qué es mDbHelper? estoy en el mismo barco y tratando de que funcione mi ListView ...
Nick Kahn

Respuestas:

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

Esto resolverá el error si aún desea utilizar ListActivity.

Nic
fuente
48
Tuve que usar un formato diferente, prueba android:id="@+id/android:list" si no funciona. Su clase aún debe extender ListActivity, y en lugar de ListView yourListView = (ListView)findViewById(R.id.yourListView);hacer esto para inicializarListView yourListView = getListView();
CQM
@CQM aquí hay algún tipo de patrón en este comportamiento?
Rui Carneiro
5
¡Esta es la solución, si el OP alguna vez se preocupó por seleccionar una respuesta!
Estados
1
¿Por qué funciona esto? ¿Por qué no puedo asignar ningún otro valor a android: id?
Vivek Pandey
1
@VivekPandey, porque está ampliando ListActivity que requiere un ListView con un android: id of list, developer.android.com/reference/android/app/ListActivity.html , zgcharley a continuación lo explicó claramente
mirageservo
52

Elimine la llamada a setContentView: no la necesita en una ListActivity a menos que esté haciendo algo radical. El código debería funcionar sin él.

Ben L.
fuente
4
Pero, ¿cómo sabe Activity qué plantilla aplicar si no usamos setContentView ()?
ses
@ses, creo que usará una plantilla ListView predefinida.
grúa el
26

Otra forma es no extender ListActivity. Simplemente amplía Activity, luego puede crear su vista de lista setContentView()y obtener la vista de lista findViewById(R.id.yourlistview).

Si se extiende desde ListActivity, no utilice setContentView(). Necesita obtener la vista de lista predeterminada alojada en la actividad de lista por getListView().

Zgcharley
fuente
10

Tuve un problema similar con el mensaje de error que recibió, y descubrí que era porque estaba extendiendo ListActivity en lugar de solo Activity (eso es lo que obtengo por reutilizar el código de un proyecto diferente;))

Tom
fuente
6
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>
niño
fuente
3

Yo también me enfrento a esto. En mi caso (tal vez no sea relevante para tu caso, solo compártelo con otros) en la clase mainActivity.java yourClassName extends ListActivity(){...}cambia ayourClassName extends Activity(){...}

Sen
fuente
1
Encontré esto realmente útil. gracias Baras por compartir esto.
Ayoub
la próxima cerveza es mía.
Venkata Tata
1

También enfrenté este problema, estaba extendiendo mi clase de actividad de listactivity, pero la identificación de mi vista de lista no era defualt, la cambié de nuevo a lista y ahora funciona bien. Asim soroya

Asim Soroya
fuente