Android: impossible de setContentView lors du passage à ListActivity
[mise à jour] j'ai obtenu l'erreur, qui dit: "Votre contenu doit avoir un ListView dont l'attribut id est" android.R.id.liste"". Appearently rien dans mon xml est ListView. Mais est-ce nécessaire?
C'est un suivi de la question sur ma question précédente
android: la vue qui dois-je utiliser pour l'affichage de texte et de l'image?
J'ai lu l'article sur la création de ListView pour LinearLayout. Cependant, mon code suivant a échoué à l'setContentView() quand j'ai changé de "s'étend de l'Activité" "extends ListActivity", une idée de pourquoi?
private TextView mSelection;
//private ImageView mImages;
static final String[] keywords = new String[]{"China", "Japan", "USA", "Canada"};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contactLayout);
mSelection = (TextView)findViewById(R.id.ContactNames);
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.contactlayout, R.id.ContactNames,keywords);
setListAdapter(adapter);
}
Ma Mise en page est à partir de cet article: http://www.curious-creature.org/2009/02/22/android-layout-tricks-1/
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="6dip"
android:src="@drawable/icon" />
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/ContactNames"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="My Application" />
<TextView
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:singleLine="true"
android:ellipsize="marquee"
android:text="Simple application that shows how to use RelativeLayout" />
</LinearLayout>
OriginalL'auteur Yang | 2010-03-31
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez mal compris les messages d'autres que je vous ai montré dans la question précédente. Ils ont expliqué comment utiliser une mise en page personnalisée pour chaque ligne de votre liste, pas comment définir l'ensemble du fichier de mise en page pour l'activité. Vous avez besoin de quelque chose comme ceci:
Noter la très importante de la ligne de
android:id="@android:id/list"
. Vous doit avez dans votre ListView que c'est ce que raconte Android emplacement de votre liste. Le cacheColorHint est utile si votre fond n'est pas noir - voir ce post pour plus de détails à ce sujet.Avec les lignes ci-dessus, vous pouvez donner à votre activité une liste qui sera reconnu correctement. Voici un exemple de base:
Puis le listrow mise en page est juste ceci:
C'est vraiment une mise en page simple. Si vous voulez obtenir quelque chose de plus compliqué, les modifications sont que vous aurez à utiliser un BaseAdapter, qui vous donne des appels
getView(...)
avant chaque ligne. Que vous pouvez utiliser différentes mises en page en fonction du contenu de chaque ligne. Cependant, BaseAdapter ressemble effrayant quand vous essayez d'abord, être averti! 🙂Ils n'étaient pas vides pour moi... Pourriez-vous mettre à jour le code que vous avez posté ci-dessus? C'est probablement une erreur avec votre
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.contactlayout, R.id.ContactNames,keywords);
ligne si vous êtes encore en les utilisant. Ce que j'ai utilisé a bien fonctionné - j'ai fait en sorte de le tester avant de le poster en ligne.intéressant! À l'aide de votre mise en page, le texte n'est pas vide. Mais ma mise en page énumérés ci-dessus devient vide! Aucune idée pourquoi?
Pour plus intéressantes listes, vous devez étendre
BaseAdapter
. Mais comme je l'ai écrit ci-dessus, qui nécessite beaucoup plus de code. Ce n'est pas vraiment compliqué tout ce que une fois que vous comprenez ce qu'il fait, mais il prend un peu de patience, et beaucoup d'essais et d'erreurs. Certainement ne pas essayer jusqu'à ce que vous comprenez totalement ce qui se passe avec cette simple liste. Que serait probablement juste de vous confondre...Voici un autre tutoriel pour les listes qui ressemble un peu plus facile à lire que ce que j'ai à l'origine vous a donné: softwarepassion.com/...
OriginalL'auteur Steve Haley
Oui, si vous utilisez une ListActivity, vous devez avoir une ListView qui est l'id est
android.R.list
dans votre fichier de mise en page.Si vous n'êtes pas à l'aide d'une ListView dans votre mise en page, et je n'en vois pas là-dedans, puis passer à l'aide d'une Activité régulière.
Si vous n'avez pas une vue de liste, il n'a pas de sens à vouloir appeler setListAdapter() -- il n'y a pas d'affichage de la liste d'affichage quel que soit la carte que vous lui en donner!
en gros vous dites ce classique de l'article est mal? androidguys.com/2008/07/14/fancy-listviews-part-one je suis en train de créer une liste des articles qui contiennent à la fois icône et un texte pour chacun d'eux.
Je ne sais pas comment vous pouvez lire cet article. La mise en forme est terrible. De toute façon, vous ne pouvez pas avoir une liste d'éléments à l'aide d'une ListActivity sans une ListView être dans votre mise en page fichier xml, et vous êtes certainement manquant.
Je vois beaucoup de des postes similaires autour de, et la ppl, sont certainement à l'aide de ListActivity sans une ListView: stackoverflow.com/questions/2451744/...
OriginalL'auteur synic
En fait, votre (personnalisé) mise en page n'a pas besoin d'une liste lorsque l'aide d'une liste d'activité. Le moyen facile de résoudre ce problème est tout simplement supprimer le setContentView() de la ligne tout à fait. En termes simples, lorsque vous le faites, Android "assume" la mise en page que vous utilisez pour contenir un seul plein écran ListView, et fournit pour vous.
Si vous souhaitez une autre (plus riche) interface de l'Activité, vous devez le code XML et utiliser le courant ID pour Android pour savoir comment afficher la liste implicite par l'activité d'une ListActivity après tout. Notez que la mise en page pour un élément n'est pas la même que la liste, et bien que je n'ai pas essayé, je suppose que vous pouvez avoir un élément personnalisé de mise en page sans l'avoir explicitement ListView dans l'activité de mise en page.
OriginalL'auteur Rafael Almeida