J'ai créé un fichier XML comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/list" >
</ListView>
et une activité:
public class ExampleActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainlist);
}
}
Comme vous le voyez, je n'ai rien fait d'autre. Mais je reçois l'erreur:
Votre contenu doit avoir un ListView dont l'attribut id est 'Android.R.id.list'
Même si j'ai la ligne Android:id="@+id/list"
dans mon xml.
Quel est le problème?
Renommez l'id de votre ListView comme ceci,
<ListView Android:id="@Android:id/list"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"/>
Puisque vous utilisez ListActivity
, votre fichier xml doit spécifier le mot-clé Android tout en mentionnant un ID.
Si vous avez besoin d'une ListView
personnalisée, alors, au lieu d'étendre une ListActivity
, vous devez simplement étendre une Activity
et avoir le même identifiant sans le mot clé Android .
Vous devriez avoir une listview dans votre fichier mainlist.xml
avec un identifiant comme @Android:id/list
<ListView
Android:id="@Android:id/list"
Android:layout_height="wrap_content"
Android:layout_height="fill_parent"/>
<ListView Android:id="@Android:id/list"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"/>
cela devrait résoudre votre problème
La façon exacte dont j'ai corrigé cela en fonction des commentaires ci-dessus car je ne pouvais pas le faire fonctionner au début
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@Android:id/list"
>
</ListView>
MainActivity.Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addPreferencesFromResource(R.xml.preferences);
preferences.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<PreferenceCategory
Android:key="upgradecategory"
Android:title="Upgrade" >
<Preference
Android:key="download"
Android:title="Get OnCall Pager Pro"
Android:summary="Touch to download the Pro Version!" />
</PreferenceCategory>
</PreferenceScreen>
Hériter Activité Classe au lieu de ListActivity vous pouvez résoudre ce problème.
public class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainlist);
}
}
<ListView Android:id="@id/Android:list"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:drawSelectorOnTop="false"
Android:scrollbars="vertical"/>
Une autre chose qui m'a affecté: si vous avez plusieurs périphériques de test, assurez-vous de modifier la disposition utilisée par le périphérique. Dans mon cas, j'ai passé un certain temps à modifier le fichier XML dans le répertoire "layout" jusqu'à ce que je découvre que mon plus gros téléphone (que je passais à mi-parcours de l'essai) utilisait xml dans le répertoire "layout-sw360dp". Grrr!