J'ai un ListView avec un adaptateur personnalisé qui crée des lignes contenant des TextViews pouvant contenir 1 ou 2 lignes de texte.Disposition falsifiée dans ListView après le défilement
news_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<TextView android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="48dip"
android:padding="6dp"
android:textSize="14sp">
</TextView>
</LinearLayout>
L'adaptateur:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.news_row, null);
}
else {
TextView titleView = (TextView)convertView.findViewById(R.id.text);
System.out.println(titleView.getText() + " to **" +
stories.get(position).title);
}
TextView titleView = (TextView)convertView.findViewById(R.id.text);
titleView.setText(stories.get(position).title);
titleView.setGravity(Gravity.CENTER_VERTICAL);
return convertView;
}
Après défilement, certains TextViews une seule ligne apparaît aligné sur la partie supérieure de la rangée, et des deux TextViews de ligne sont à la en bas de la rangée. Le problème semble se produire lorsqu'une ligne qui contenait à l'origine une TextView à 2 lignes reçoit une seule ligne de texte, et vice-versa.
Je pensais que la définition de Gravity dans getView résoudrait ce problème de recyclage de ligne mais cela doit être autre chose. Que faire si je crée le TextView par programme chaque fois que la ligne est recyclée? Est-ce ce qu'il faut pour le "réinitialiser"?
Je ne comprends pas - comment puis-je régler le nombre de lignes pendant le gonflage initial? Je veux que le texte soit centré indépendamment du nombre de lignes. Le tutoriel implique que je voudrais utiliser différentes dispositions pour obtenir ce résultat, ce qui n'a pas de sens pour moi. Je ne sais même pas comment je pourrais déterminer le nombre de lignes dont TextView aura besoin pour rendre le texte. –