Ma classe étend SimpleCursorAdapter. Dans cette classe, j'essaie de se CallLog dans ListView (avec trois TextViews (numéro, nom et date) et deux ImageViews (qui représente les appels entrants et sortants)Custom CursorAdapter, ListView est en décalage
Mon code dans la méthode OnCreate:.
Cursor c = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, null, "TYPE IN (\"1\",\"2\")", null, "DATE DESC");
startManagingCursor(c);
String[] from = new String[] {"number", "name" , "_ID" };
int[] to = new int[] {R.id.number, R.id.name, R.id.duration};
listNotImported=(ListView)findViewById(R.id.ListOfNotImportedCalls);
listNotImported.setOnItemClickListener(this);
list1Adapter5 = new IconicAdapter5(this, R.layout.rownotimportedcalls, c, from, to);
listNotImported.setAdapter(list1Adapter5);
ma classe:
class IconicAdapter5 extends SimpleCursorAdapter
{
public IconicAdapter5(Context context, int layout, Cursor c, String[] from, int[] to)
{
super(context, layout, c, from, to);
}
public View newView(Context context, Cursor c, ViewGroup parent)
{
rowNotImported = super.newView(CallLog.this, c, parent);
String duration= c.getString(c.getColumnIndex("DURATION"));
((TextView)rowNotImported.findViewById(R.id.duration)).setText(duration);
return (rowNotImported);
}
colonnes « numéro », « name », « _ID » fonctionne très bien, tout est ok, mais la durée, et une autre colonne, que j'essaie d'obtenir du curseur (par exemple, la « durée ») dans. La méthode newView est en train de changer jwei512 du blog ThinkAndroid (http://thinkandroid.wordpress.com/2010/01/11/custom-cursoradapters/) a écrit à ce sujet, mais je ne comprends toujours pas comment je peux mettre à mon avis des colonnes calculées, et d'autres colonnes dans la méthode newView.
Je suis confus, parce que je ne peux pas trouver de solution sur internet. S'il vous plaît, aidez-moi. "Ensuite, vous remarquerez un comportement étrange - à savoir, vous verrez les noms commencer à se déplacer lorsque vous faites défiler la liste vers le haut et vers le bas.Ce qui se passe est que si vous instanciez et placez quelque chose Dans votre TextView, rien dans la méthode bindView n'est lié à certains TextViews et donc au changement de position, donc si vous voyez des choses se déplacer dans vos listes, alors c'est un gros drapeau à faire. Assurez-vous de lier les choses à toutes vos vues dans vos méthodes newView et bindView. "
XML représentant ma ligne:
<TableLayout android:layout_alignParentLeft="true"
android:layout_alignBaseline="@+id/myTable" android:id="@+id/myTable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:stretchColumns="0"
android:shrinkColumns="yes">
<TableRow>
<TextView
android:id="@+id/name"
android:textSize="18dp"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:id="@+id/imageViewType">
</ImageView>
</TableRow>
<TableRow>
<LinearLayout>
<TextView
android:id="@+id/headerNumber"
android:textColor="@color/white"
android:textSize="12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/number"
android:textColor="@color/white"
android:textSize="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
>
</TextView>
</LinearLayout>
</TableRow>
<TableRow>
<LinearLayout>
<TextView
android:id="@+id/headerDate"
android:textColor="@color/white"
android:textSize="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/date"
android:textColor="@color/white"
android:textSize="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip" >
</TextView>
</LinearLayout>
</TableRow>
<TableRow>
<LinearLayout>
<TextView
android:id="@+id/headerDuration"
android:textColor="@color/white"
android:textSize="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/duration"
android:textColor="@color/white"
android:textSize="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp" >
</TextView>
</LinearLayout>
</TableRow>
</TableLayout>
d'après ce que je comprends est que vous devez définir _something_ aux vues du NewView et bi ndView.Essayez de définir la durée TextView à une chaîne vide par exemple (ou un seul espace) si vous n'avez pas de données à placer dans bindView ou newView. – Audrius
Merci Audrius, je l'ai fait comme ça (cela n'a pas aidé) \t \t \t \t ** si (durée == null) durée = getText (R.string.unknown) .toString(); ** –
OK, peut vous expliquez ce que vous voulez dire par "déplacement"? Les éléments de la liste de sélection changent-ils de position de façon sporadique ou les vues de contenu d'élément de liste sont-elles redimensionnées lors du défilement? – Audrius