Checkbox und Event

  • Antworten:2
  • Bentwortet
Thenextone
  • Forum-Beiträge: 8

22.01.2012, 09:43:22 via Website

Kann mir jemand erklären, wie ich eine Checkbox abfangen kann?
Ich habe eine ListView mit passendem ArrayAdapter. Egal wo ich ein OnCheckedChange-Event oder OnItemClickListener
einbaue, passiert gar nichts. Und mit Gar Nichts meine ich wirklich Gar Nichts. Weder irgendwelche Log-Ausgaben
oder sonst was.

Das ganze Projekt direkt von Eclipse ausgecheckt findet ihr hier: Projekt
Wäre ganz dringend und komme wirklich nicht mehr weiter :(

Hier sind mal Adapter und ListActivity:
1public CustomAdapter(Context context, int textViewResourceId, ArrayList<Channel> items) {
2 super(context, textViewResourceId, items);
3 this.items = items;
4 this.context = context;
5 this.resourceID = textViewResourceId;
6 }
7
8 @Override
9 public View getView(int position, View convertView, ViewGroup parent) {
10 v = convertView;
11 if(v == null){
12 LayoutInflater vi = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
13 v = vi.inflate(resourceID, null);
14 }
15 c = items.get(position);
16 if(c != null){
17 if(resourceID == R.layout.favourite_settings_row) {
18 setSettingView(position);
19 }
20 if(resourceID == R.layout.all_channels_row) {
21 setAllChannelsView();
22 }
23 }
24 return v;
25 }
26 private void setAllChannelsView() {
27 TextView name = (TextView) v.findViewById(R.id.channelTitleAllChannels);
28 if(name != null)
29 name.setText(c.getTitle());
30 }
31 private void setSettingView(int position) {
32 TextView name = (TextView) v.findViewById(R.id.channelTitleSettings);
33 CheckBox isFavourite = (CheckBox) v.findViewById(R.id.isFavourite);
34 if(name != null){
35 name.setText(c.getTitle());
36 }
37 if(isFavourite != null) {
38 isFavourite.setTag(position);
39 isFavourite.setOnCheckedChangeListener(this);
40 }
41 }
42 @Override
43 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
44 int position = (Integer) buttonView.getTag();
45 View view = getView(position, v, null);
46 CheckBox test = (CheckBox) view.findViewById(R.id.isFavourite);
47 Channel c = getItem(position);
48 c.setFavourite(test.isChecked());
49
50 System.out.println("##############################################");
51 }
52}
1public class SettingsActivity extends ListActivity implements OnClickListener {
2 private ArrayList<Channel> channels = new ArrayList<Channel>();
3 private CustomAdapter adapter;
4 private Button back, save, login, register;
5 private TouchListView listView = null;
6
7 @Override
8 protected void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.settings);
11 this.back = (Button) findViewById(R.id.closeSettings);
12 this.back.setOnClickListener(this);
13 this.save = (Button) findViewById(R.id.saveSettings);
14 this.save.setOnClickListener(this);
15 listView = (TouchListView) getListView();
16 channels = JsonParser.getChannels();
17 this.adapter = new CustomAdapter(this, R.layout.favourite_settings_row, channels);
18 setListAdapter(adapter);
19 listView.setDropListener(onDrop);
20 listView.setRemoveListener(onRemove);
21 }
22 private TouchListView.DropListener onDrop = new TouchListView.DropListener() {
23 @Override
24 public void drop(int from, int to) {
25 Channel item = adapter.getItem(from);
26 adapter.remove(item);
27 adapter.insert(item, to);
28 }
29 };
30 private TouchListView.RemoveListener onRemove = new TouchListView.RemoveListener() {
31 @Override
32 public void remove(int which) {
33 adapter.remove(adapter.getItem(which));
34 }
35 };
36 @Override
37 public void onClick(View v) {
38 if(v.equals(back)){
39 this.finish();
40 }
41 if(v.equals(save)) {
42 [...]
43 this.finish();
44 }
45 }
46}

— geändert am 22.01.2012, 09:48:03

Antworten
Felix
  • Forum-Beiträge: 259

22.01.2012, 12:02:57 via Website

Tach!

Kann mir jemand erklären, wie ich eine Checkbox abfangen kann?
Ich habe eine ListView mit passendem ArrayAdapter. Egal wo ich ein OnCheckedChange-Event oder OnItemClickListener
einbaue, passiert gar nichts. Und mit Gar Nichts meine ich wirklich Gar Nichts. Weder irgendwelche Log-Ausgaben
oder sonst was.

Das kann man ruhig etwas genauer beschreiben. Zum Beispiel: „Ich habe einen Breakpoint in die Methode onCheckedChanged() gesetzt, aber der Debugger hat nicht an ihm angehalten.“ Dann könnte ich sehen, dass du den Debugger schon bemüht hast, aber auch mit diesem anscheinend keine Reaktion auf das Checken zu sehen war. Wenn du allerdings schon den Teil mit dem Debugging übersprungen hast, so bitte ich dich, ihn nachzuholen. Angenommen, der Eventhandler wird nicht angesprungen, so kann das eigentlich nur zwei Ursachen haben. Er ist nicht für das jeweilige Element gesetzt – das kann man prüfen, indem man mit dem Debugger verfolgt, ob wenigstens der Code für das Setzen ausgeführt wird – oder jemand anderes nimmt ein Ereignis weg.

1@Override
2 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
3 int position = (Integer) buttonView.getTag();
4 View view = getView(position, v, null);
5 CheckBox test = (CheckBox) view.findViewById(R.id.isFavourite);
6 Channel c = getItem(position);
7 c.setFavourite(test.isChecked());
8
9 System.out.println("##############################################");
10 }

Hat Eclipse denn nicht angemeckert, dass das @Override überflüssig ist? Beim Implementieren von Interface-Methoden gilt es, die Methoden hinzuzufügen. Die sind vorher nicht da und demzufolge gibt es nichts hinzuzufügen.

Was soll deiner Meinung nach diese Methode machen? Beschreib bitte besonders die Aufgabe des getView()-Aufrufs.


Felix.

Antworten
Thenextone
  • Forum-Beiträge: 8

22.01.2012, 12:34:26 via Website

Habe noch vor dem Mittag den Fehler entdeckt.
Wollte das nun eigentlich schließen :)

Danke für die schnelle Antwort.
Der Fehler lag daran, was mir beim debuggen nicht aufgefallen ist, das ich eine neue Ordnerstruktur hinzugefügt habe und die Klassen dementsprechend verschoben.
Was ich allerdings nicht gesehen habe, war das bei einem SVN Check-In und danach Check-Out die alten Klassen (welche ja verschoben worden sind) nicht gelöscht wurden.
Somit hatte ich die alten Klassen in Verwendungen aber in den neuen Klassen alles geändert.

Aber was kann man schon an einem Sonntag-Vormittag erwarten :D

Danke für die Hilfe :)

Antworten