RuntimeException: votre contenu doit avoir un ListView dont l'attribut id est 'android.R.id.list'

87

Je reçois une exception d'exécution

java.lang.RuntimeException: votre contenu doit avoir un ListView dont l'attribut id est 'android.R.id.list'

Je ne sais pas ce qui ne va pas.

@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
la source
15
assurez-vous de sélectionner une réponse!
Phil
qu'est-ce que mDbHelper? Je suis sur le même bateau et j'essaie de le faire fonctionner ma ListView ...
Nick Kahn

Réponses:

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

Cela résoudra l'erreur si vous souhaitez toujours utiliser un ListActivity.

Nic
la source
48
J'ai dû utiliser un format différent, essayez android:id="@+id/android:list" si cela ne fonctionne pas. Votre classe doit toujours étendre ListActivity, et au lieu de faire ListView yourListView = (ListView)findViewById(R.id.yourListView);cela pour initialiserListView yourListView = getListView();
CQM
@CQM y a-t-il une sorte de modèle sur ce comportement?
Rui Carneiro
5
C'est la solution, si le PO s'est jamais soucié de sélectionner une réponse!
États
1
Pourquoi ça marche? Pourquoi ne puis-je pas attribuer une autre valeur à android: id?
Vivek Pandey
1
@VivekPandey, parce que vous étendez ListActivity qui nécessite un ListView avec un android: id of list, developer.android.com/reference/android/app/ListActivity.html , zgcharley ci-dessous l'a expliqué clairement
mirageservo
52

Supprimez l'appel à setContentView- vous n'en avez pas besoin dans une ListActivity sauf si vous faites quelque chose de radical. Le code devrait fonctionner sans lui.

Ben L.
la source
4
Mais comment Activity sait-il quel modèle appliquer si nous n'utilisons pas setContentView ()?
ses
@ses, je pense qu'il utilisera un modèle ListView prédéfini.
tourné le
26

Une autre façon est de ne pas s'étendre ListActivity. S'étend simplement Activity, alors vous pouvez créer votre vue de liste par setContentView()et obtenir la vue de liste par findViewById(R.id.yourlistview).

Si vous étendez de ListActivity, ne l'utilisez pas setContentView(). Vous devez obtenir la vue de liste par défaut hébergée dans l'activité de liste par getListView().

zgcharley
la source
10

J'ai eu un problème similaire avec le message d'erreur que vous avez reçu, et j'ai trouvé que c'était parce que j'étendais ListActivity au lieu de simplement Activity (c'est ce que j'obtiens pour redéfinir le code d'un projet différent;))

À M
la source
6
<ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:scrollbars="vertical"/>
enfant
la source
3

Je fais face comme ça aussi. Dans mon cas (peut-être pas pertinent avec votre cas, partagez-le simplement avec les autres) en classe mainActivity.java yourClassName extends ListActivity(){...}changez pouryourClassName extends Activity(){...}

Sen
la source
1
J'ai trouvé cela vraiment utile. merci Baras pour ce partage.
Ayoub
la prochaine bière est sur moi.
Venkata Tata
1

J'ai également rencontré ce problème, j'étendais ma classe d'activité à partir de listactivity, mais l'id de ma vue de liste n'était pas par défaut, je l'ai changé en liste et maintenant cela fonctionne bien. Asim Soroya

Asim Soroya
la source