Individuelle Formatierung von ChildViews im SimpleCursorTreeAdapter

  • Antworten:0
  • OffenNicht stickyNicht beantwortet

Gelöschter Account

06.04.2011 11:47:16 via Website

Hmm, ich bin heute irgendwie blind - will aber nicht bis morgen warten ;-) Wäre jemand so freundlich und stupst mich mal an?

Ich verwende eine ExpandableListActivity. Verwendet werden ein SimpleCursorTreeAdapter dem mittels eines setViewBinder() die Möglichkeit gegeben wird die Listeneinträge individuell zu zeichnen (setViewValue()). Diese Methode kennt man ja schon vom SimpleCursorAdapter.

Nun möchte ich aber auch die ChildViews indivuell gestalten.

setViewValue() wird für den GroupCursor mit den GroupViews genauso aufgerufen wie für den jeweiligen ChildCursor mit den zugehörigen ChildViews. Ich kann das an den Feldern im Cursor erkennen (Cursor.mColumns). Wie kann ich denn die beiden unterscheiden? Das an Hand der Spaltennamen zu erkennen erscheint mir etwas zu gefährlich.

setViewValue(View view, Cursor cursor, int columnIndex) wird nur mit diesen drei Werten aufgerufen. Der View wird ohnehin immer recycled, der columnIndex bezieht sich auf die Position des Wertes im Cursor und Cursor, nun ja, darum geht es - hier kommen ja immer unterschiedliche Cursor an (mal der GroupCursor, mal der ChildCursor). Wie kann ich Cursor zuverlässig unterscheiden?

Hier der manuell modifizierte Code:

1public class Test extends ExpandableListActivity {
2
3 private final class MySimpleCursorTreeAdapter extends SimpleCursorTreeAdapter{
4
5 public MySimpleCursorTreeAdapter(final Context context, final Cursor cursor, final int groupLayout, final String[] groupFrom, final int[] groupTo, final int childLayout, final String[] childFrom, final int[] childTo) {
6 super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo);
7 }
8
9 @Override
10 protected Cursor getChildrenCursor(final Cursor cursor) {
11 Cursor cursorChild = null;
12
13 long id = cursor.getLong(0);
14
15 if (id == Datenbank.GROUP1) {
16 cursorChild = datenbank.fetchGroup1ChildCursor(sqliteDatabase, Group1);
17 } else if (id == Datenbank.GROUP2) {
18 cursorChild = datenbank.fetchGroup2ChildCursor(sqliteDatabase, Group2);
19 }
20
21 if (cursorChild != null) {
22 startManagingCursor(cursorChild);
23 }
24
25 return cursorChild;
26 }
27 }
28
29...
30
31 Cursor cursorGroup = datenbank.fetchGroups(sqliteDatabase);
32 if (cursorGroup != null) {
33 startManagingCursor(cursorGroup);
34
35 MySimpleCursorTreeAdapter mySimpleCursorTreeAdapter = new MySimpleCursorTreeAdapter(this,
36 cursorGroup,
37 R.layout.rowgroup,
38 new String[] { "name" },
39 new int[] { R.id.rowgroup_text },
40 R.layout.rowchild,
41 new String[] { "text" },
42 new int[] { R.id.rowchild_text } );
43
44 if (mySimpleCursorTreeAdapter != null) {
45 mySimpleCursorTreeAdapter.setViewBinder(new SimpleCursorTreeAdapter.ViewBinder() {
46
47 @Override
48 public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
49 if (columnIndex == 1) {
50 // Hier wird selbst gezeichnet - aber welcher Cursor steht da gerade vor der Tür?
51 return true;
52 }
53 return false;
54 }
55

56 } );
57
58 setListAdapter(mySimpleCursorTreeAdapter);
59 }
60 }
61
62}

Sorry, ist etwas viel Code.

Danke.
Harald

— geändert am 06.04.2011 11:52:20