ArrayAdapter nécessite d'identité, un TextView erreur
Je suis en train de créer une belle mise en page pour mon les éléments de la liste, mais mon code ne fonctionne que si elle est simplifiée comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
Quand j'ajoute un peu plus, il compile et s'exécute, mais elle se ferme sur démarrer et me donne l'erreur ArrayAdapter requires ID to be a TextView
:
<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/icon1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:layout_marginRight="6dip"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/secondLine"
android:layout_width="fill_parent"
android:layout_height="26dip"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/icon1"
android:ellipsize="marquee"
android:singleLine="true"
android:text="Some more information" />
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/secondLine"
android:layout_alignParentTop="true"
android:layout_alignWithParentIfMissing="true"
android:layout_toRightOf="@id/icon1"
android:gravity="center_vertical"
android:text="Some Information" />
<ImageView
android:id="@+id/icon2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="6dip"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
et
public class FirstLoginActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] testcontacts = getResources().getStringArray(
R.array.testcontacts_array);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_items,
testcontacts));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
}
Je suis assez sûr que je suis en train de faire de ce droit, je l'ai été par le biais de nombreux tutoriels et j'ai trouvé que la manière la plus rapide et la plus efficace est de créer un statique ViewHolder
classe. L'un des tutoriels essayé d'accéder aux données directement, ce qui est ce que j'essayais de faire. Je suis toujours un peu confus sur la façon de le faire.
public class FirstLoginActivity extends ListActivity {
Context mContext;
List mList;
String[] testcontacts = getResources().getStringArray(
R.array.testcontacts_array);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_items,
testcontacts));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
}
public View getView(int position, View convertview, ViewGroup parent) {
ViewHolder holder;
View v = convertview;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) LayoutInflater
.from(mContext);
v = inflater.inflate(R.layout.list_items, null);
holder = new ViewHolder();
holder.firstLine = (TextView) v.findViewById(R.id.firstLine);
holder.secondLine = (TextView) v.findViewById(R.id.secondLine);
holder.icon1 = (ImageView) v.findViewById(R.id.icon1);
holder.icon2 = (ImageView) v.findViewById(R.id.icon2);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.firstLine.setText(testcontacts[position]);
holder.secondLine.setText(testcontacts[position]);
//holder.icon1.setImageBitmap((position & 1) == 1 ? mIcon1: mIcon2);
//call the images directly?
return v;
}
static class ViewHolder {
TextView firstLine;
TextView secondLine;
ImageView icon1;
ImageView icon2;
}
}
OriginalL'auteur The Tokenizer | 2011-12-29
Vous devez vous connecter pour publier un commentaire.
Vous êtes probablement en utilisant quelque chose comme ceci (voici la doc):
dans ce cas, votre mise en page doit être une mise en page simple avec un TextView.
Si vous voulez utiliser votre propre mise en page, vous devez écrire un adaptateur personnalisé.
OriginalL'auteur gwvatieri
Construire votre propre ArrayAdapter, alors vous pouvez faire le travail de mise en toutefois vous le souhaitez.
Pouvez-vous me diriger vers un bon tuto qui pourrait m'apprendre à me créer mon propre listAdapter?
youtube.com/watch?v=wDBM6wVEO70 c'Est les développeurs expliquant comment les listviews travail, et comment les faire fonctionner à droite.
Merci cette Vidéo vraiment aidé beaucoup, mais maintenant je suis coincé à accéder à mes informations directement à afficher dans ma liste.
OriginalL'auteur Ashterothi
La ArrayAdapter nécessite l'ID de ressource pour être un TextView XML exception signifie que vous ne fournissez pas ce que le ArrayAdapter attend. Lorsque vous utilisez ce constructeur:
R.Layout.a_layout_file
doit être l'id d'un xml fichier de mise en page ne contenant qu'un TextView(le TextView ne peut pas être enveloppé par une autre structure, comme un LinearLayout, RelativeLayout etc!), quelque chose comme ceci:Si vous voulez que votre liste de lignes de mise en page pour être quelque chose d'un peu différent d'une simple TextView widget utilisation de ce constructeur:
où vous fournit l'id d'une mise en page qui peut contenir divers points de vue, mais doit également contenir un TextView avec et id(le troisième paramètre) que vous transmettez à votre ArrayAdapter de sorte qu'il peut savoir où mettre les Chaînes dans la ligne de mise en page.
Il ne sera pas un problème. Au lieu d'une seule touche ou textview, Vous pouvez utiliser de multiples points de vue dans le arrayadapter. @NinjaCoder
OriginalL'auteur Sathish
Vous semblez être sur la bonne voie. Je ne suis pas sûr que la cause exacte avec votre code comme je n'ai pas comparé de près, mais il fonctionne dans cet exemple.
Le tutoriel complet est ici: Android tutoriel pour les débutants - 97 - ListView avec Mise en page Personnalisée
Cela évite l'erreur
ArrayAdapter requires ID to be a TextView
qui j'avais aussi.OriginalL'auteur SharpC