T
Tom299
Stammgast
- 122
Hallo zusammen,
ich hab in meiner Activity eine ListView mit einem Listener, um das selektierte Item abzufragen (Check-Boxen hab ich keine mehr in meiner Zeile drin, d.h. das Event kommt einwandfrei erst mal an und mein Toast wird angezeigt beim Klick):
Dadurch hat man erst mal ein "Standardlayout mit Standardfarben", wobei hier alle Zeilen die gleiche Farbe haben und die selektierte Zeile wird orange hervorgehoben. Soweit so gut.
Nun will ich aber, daß meine Zeilen abwechselnde Farben haben. Also hab ich in meinem Adapter folgendes eingebaut:
Die Zeilen werden zwar nun schön abwechselnd eingefärbt, allerdings wird nun die selektierte Zeile nicht mehr farblich hervorgehoben (keine Standard-Orange-Farbe mehr).
Ok dachte ich mir, dann muß ich das wohl auch selbst übernehmen, also hab ich einen OnTouch-Listener implementiert:
Damit wird nun meine selektierte Zeile wieder farblich hervorgehoben bzw. beim deselektieren wieder die alte Zeilenfarbe genommen.
Doch nun hab ich das Problem, daß mein OnItemClickListener der ListView nicht mehr funktioniert, da das TouchEvent wohl den Click konsumiert.
Wie kann ich nun das Event weiterreichen, damit der OnItemClickListener weiterhin funktioniert oder wie macht man es richtig in Android?
Mein erster Versuch war, das return-Ergebnis von true auf false im OnTouch-Listener zu setzen. Das scheint prinzipiell zu funktionieren, aber dann funktioniert das deselektieren der Zeile nicht mehr. Also irgendwo bekomm ich momentan immer nen Folgefehler bei meiner Vorgehensweise ...
Gruß,
Tom
ich hab in meiner Activity eine ListView mit einem Listener, um das selektierte Item abzufragen (Check-Boxen hab ich keine mehr in meiner Zeile drin, d.h. das Event kommt einwandfrei erst mal an und mein Toast wird angezeigt beim Klick):
Code:
itemsAdapter = new DBItemArrayAdapter(this, R.layout.table_item_new, dbItems);
listView.setAdapter(itemsAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView av, View v, int index, long arg3) {
//System.out.println("ItemClicked");
selectedDBItem = dbItems.get(index);
if (selectedDBItem != null) {
Toast itemToast = Toast.makeText(getApplicationContext(), selectedDBItem.getName() + " " + selectedDBItem.getVorname(), Toast.LENGTH_SHORT);
itemToast.show();
}
}
});
layout.addView(listView);
Nun will ich aber, daß meine Zeilen abwechselnde Farben haben. Also hab ich in meinem Adapter folgendes eingebaut:
Code:
final TableRow rowItem = (TableRow)dbItemsView.findViewById(R.id.item_row);
if (position % 2 == 0) {
//rowItem.setBackgroundColor(Color.DKGRAY);
rowItem.setBackgroundColor(colorEven);
}
else {
//rowItem.setBackgroundColor(Color.GRAY);
rowItem.setBackgroundColor(colorOdd);
}
Ok dachte ich mir, dann muß ich das wohl auch selbst übernehmen, also hab ich einen OnTouch-Listener implementiert:
Code:
rowItem.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
rowItem.setBackgroundColor(Color.YELLOW);
return true;
}
else if (event.getAction() == MotionEvent.ACTION_UP) {
if (position % 2 == 0) {
//rowItem.setBackgroundColor(Color.DKGRAY);
rowItem.setBackgroundColor(colorEven);
}
else {
//rowItem.setBackgroundColor(Color.GRAY);
rowItem.setBackgroundColor(colorOdd);
}
return true;
}
else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
if (position % 2 == 0) {
//rowItem.setBackgroundColor(Color.DKGRAY);
rowItem.setBackgroundColor(colorEven);
}
else {
//rowItem.setBackgroundColor(Color.GRAY);
rowItem.setBackgroundColor(colorOdd);
}
return true;
}
return false;
}
});
Doch nun hab ich das Problem, daß mein OnItemClickListener der ListView nicht mehr funktioniert, da das TouchEvent wohl den Click konsumiert.
Wie kann ich nun das Event weiterreichen, damit der OnItemClickListener weiterhin funktioniert oder wie macht man es richtig in Android?
Mein erster Versuch war, das return-Ergebnis von true auf false im OnTouch-Listener zu setzen. Das scheint prinzipiell zu funktionieren, aber dann funktioniert das deselektieren der Zeile nicht mehr. Also irgendwo bekomm ich momentan immer nen Folgefehler bei meiner Vorgehensweise ...
Gruß,
Tom