ListView macht update viel zu spät

  • Antworten:7
Markus Gu
  • Forum-Beiträge: 2.644

15.02.2010, 15:04:35 via Website

Hallo

hab ein problem mit einer Listactivity bzw deren Liste

also ich habe eine listactivity, darauf eine liste mit einem Adapter. der ist von ArrayAdapter abgeleitet.

Soweit so gut

alle methoden überschrieben und in der getview eben ein layout inflated - alle werte zugewiesen - soweit alles super

dann bekomme ich über einen listener mitgeteilt, dass es einen neuen wert gibt für eine zeile.

gut dann ruf ich eine update methode auf in meinem adapter - ändere den wert und mache notifiyDatasetChanged.

in der liste passiert genau nichts. solange nicht bis ich zb das telefon drehe oder die tastatur aufklappe oder sowas

hat jemand eine ahnung was da schuld sein kann? ein notifyDatasetChanged war bisher immer ausreichend.

swordiApps Blog - Website

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

15.02.2010, 21:49:02 via Website

Ich hab ein ähnliches Problem, mir half nur den Adapter etc. neu zu setzen. Alle Bsp funtzten, nach zwei Tagen such hab Ich dann den Kram beiseite geschoben und es erstmal so gelassen.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Stef
  • Forum-Beiträge: 15

16.02.2010, 00:12:19 via Website

Ich hab es gerade mal versucht ... klappt super bei mir!
Jedoch ist das setzen eines Adapters sehr teuer!!!

1public class list extends ListActivity {
2 private String[] mStrings = {
3 "Hallo", "Welt!", "Das", "ist", "ein", "Test"};
4 private ArrayAdapter<String> mListAdapter = null;
5
6 /** Called when the activity is first created. */
7 @Override
8 public void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10
11 mListAdapter = new ArrayAdapter<String>(this,
12 android.R.layout.simple_list_item_1, mStrings);
13
14 setListAdapter(mListAdapter);
15 }
16
17 @Override
18 protected void onListItemClick(ListView l, View v, int position, long id) {
19 super.onListItemClick(l, v, position, id);
20
21 mStrings[position] = "Androidpit";
22 mListAdapter.notifyDataSetChanged();
23 }
24}

Postet mal euren Code, vielleicht finde ich was

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

16.02.2010, 09:13:52 via Website

Das ist das Problem, ich nutze Cursor und das DAO Pattern, Viewbinder etc pp, momentan kann ich das nicht mal eben Posten. Gegen ende dieser Iteration werde Ich mein Problem mal selbst zerlegen und gucken woran es liegt.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

16.02.2010, 13:27:02 via Website

ich hab jetzt versucht jedes mal den adapter neu zu erzeugen und dann wieder der liste zuzuweisen, aber auch das bleibt ohne erfolg. irgendwo ist da ganz gewaltig ein denkfehler drin

swordiApps Blog - Website

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

16.02.2010, 13:48:12 via Website

Bei mir hab ich das solange in eine Methode ausgelagert:

1private void setupMapping(final Cursor _cursor)
2 {
3 if (_cursor == null)
4 {
5 throw new NullPointerException("Cursor");
6 }
7 startManagingCursor(_cursor);
8
9 // Util.printCursorColumnNames(_cursor);
10
11 final String[] from = new String[]
12 { "name", "minwind", "maxwind", "windmeasure", "starting", "till", "activ" };
13 final int[] to = new int[]
14
15 // "SELECT A.name, B.spotid, B.starting, B.till,B.activ FROM selected as B,spot as A where A.spotid=B.spotid"
16 // custom_spotoverview_wind_details
17 { R.id.custom_spotoverview_name, R.id.custom_spotoverview_wind_start, R.id.custom_spotoverview_wind_end,
18 R.id.custom_spotoverview_wind_details, R.id.custom_spotoverview_wind_from,
19 R.id.custom_spotoverview_wind_to, R.id.custom_spotoverview_activ };
20 shows = new SimpleCursorAdapter(this, R.layout.custom_listview_spotoverview, _cursor, from, to);
21 shows.setViewBinder(new SpotOverviewViewBinder());
22 setListAdapter(shows);
23 }


Problem ist das man die selektion verliert, das ist mehr als User unfreundlich. Kommentiere ich das setViewBinder raus, hab ich das gleiche Problem.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Meschugge M
  • Forum-Beiträge: 24

17.02.2010, 10:30:28 via Website

Nur mal sicherheitshalber: Dein Code läuft schon im UI-Thread, oder?

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

17.02.2010, 10:35:21 via Website

genau das, ist mir heute nacht auch eingefallen ;)

muss am abend zuhause mal probieren, aber ich glaub ich bin in einem anderen thread, was das ganze dann natürlich erklärt. ich depp :)

swordiApps Blog - Website

Antworten