Checked ListView

  • Antworten:10
Johann Es
  • Forum-Beiträge: 16

07.11.2012, 23:27:50 via Website

Hey ihr,
ich habe ne Listview die so abhakbar sein soll, das kann man ja eig. ganz einfach machen, indem man den
1ArrayAdapter<Zutat> adapter = new ArrayAdapter<Zutat>(this,android.R.layout.simple_list_item_multiple_choice, android.R.id.text1, listZutaten);

macht. Allerdings checked der das item nicht wenn ich drauf klicke! ich will auch keinerlei Logik dahinter machen, man soll einfach nur den haken setzen und wieder entfernen können, ohne das sonst was passiert! Ich hab kein click event auf die ListView implementiert!

Vielen Dank schonmal
Johannes

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

08.11.2012, 10:24:14 via Website

Wo ist der Sinn hinter Checkboxen die nix machen ? Keep it simple !!!

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

Antworten
Johann Es
  • Forum-Beiträge: 16

08.11.2012, 14:22:28 via Website

naja es macht schon sinn, da es so ne einkaufsliste ist, die man eben abhaken kann oder nicht. Da es nur um eine temopräre liste geht, wird auch nicht abgespeichert ob das item checked ist oder nicht -> deshalb soll die checkbox nix machen, sondern einfach nur anhakbar sein!

Wie mach ich das nun?

Antworten
Johann Es
  • Forum-Beiträge: 16

08.11.2012, 21:28:37 via Website

ok, habe das jetzt mit:

1listViewZutaten.setOnItemClickListener(new OnItemClickListener() {
2 private View view;
3 public void onItemClick(AdapterView<?> ListView, View view, int position, long id) {
4 CheckedTextView textView = (CheckedTextView)view;
5 textView.setChecked(!textView.isChecked());
6 this.view = view;
7 }
8
9 });
gelöst! funktioniert soweit auch ganz gut! Das Problem ist allerdings, wenn ich das 1. item in der Liste checke, dann checked es automatisch das 11. auch, beim 2. das 12. , usw... an was liegt das denn?? versteh das gar nicht :(

— geändert am 08.11.2012, 23:09:29

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

09.11.2012, 12:38:41 via Website

Schau dir mal an wie eine ListView ihre Items "cached". Darüber gibt es zig Talks auf You Tube z.b: http://www.youtube.com/watch?v=wDBM6wVEO70

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

Antworten
Johann Es
  • Forum-Beiträge: 16

09.11.2012, 13:11:41 via Website

hm,
hab da jetzt nix gefunden was mit hilft... :(

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

09.11.2012, 13:57:46 via Website

Antworten
Johann Es
  • Forum-Beiträge: 16

09.11.2012, 14:13:20 via Website

oh das heißt ich muss meinen eigenen arrayAdapter machen obwohl ich gar keine logik brauche? will ja nur checkboxen anklicken können :(

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

09.11.2012, 14:31:56 via Website

Das Problem ist Dein onItemClickListener.

Du klickst eine Checkbox einer Zeile an und setzt die Markierung. Wenn Du blätterst werden aber nach dem kompletten Seitenwechsel wieder die selben Views angezeigt (es sind die selben). Diese Views haben also noch den Zustand von der Seite zuvor. Also fehlt Dir ein Callback der Dir die Möglichkeit bietet während des Scrollens auch wieder zu deselektieren. Das macht man üblicherweise mit dem ViewBinder oder einem eigenen CustomAdapter.

Aber auch das wird für Dich eine Herausforderung da Du ja nirgendwo in Deinem Array festhalten kannst welches Item nun angeklickt wurde und welches nicht.

An dieser Stelle merkst Du das die Frage "was soll eine Checkbox wenn sie nichts darstellt" tatsächlich einen tieferen Sinn besitzt. Deine Checkbox repräsentiert keine Daten also ist das Ganze absolut sinnfrei.

Antworten
Johann Es
  • Forum-Beiträge: 16

09.11.2012, 16:04:58 via Website

naja ich habs ja oben schon geschrieben, die checkbox repräsentiert zwar keine Daten, allerdings ist das so eine art einkaufsliste die man aus usability gründen abhaken kann damit man eben weiß was man schon hat und was nicht.

hm das ist schade, dann bleibt mir wohl wirklich nix anderes übrig als einen eignen arrayadapter zu schreiben oder das feature einfach weg zu lassen.

Trotzdem vielen Dank!

Antworten