Hallo, ich komme langam voran - die nächste Hürde, welche zu nehmen ist, ist der ViewFlipper.
Hier habe ich noch ein Verständnisproblem der genauen Arbeitsweise des Flippers. Folgender Code kann erst einmal nur eine Ebene tief flippen:
Ich erstelle im OnItemClickListener die nächste View in Abhängigkeit der jeweiligen Nutzereingabe.
Ich gebe der View eine eindeutige ID, welche für den nächsten Schritt automatisch hochgezählt wird.
Die View wird dem Flipper hinzugefügt, die vergebene ID dem Flipper als Identifizierung der nächsten View mitgeteilt und anschließend mit showNext() die View letztentlich gewechselt.
Kann der ViewFlipper jeweils nur zwischen zwei Views wechseln?
Wenn ich eine Ebene zurück gehe, dann muss ich die aktuelle View natürlich wieder entfernen.
Wie kann ich das realisieren? - Bekomme ich irgendwie über das MotionEvent die View über welche der Finger bewegt wurde?
Außerdem ist event.getAction() ungünstig, um den Swipe zu detektieren. - Aber eine Methode wie "getDirection()" kennt das MotionEvent nicht. Aus der Doku bin ich auch noch nicht schlau geworden... Google könnte mal ein Bespiel für die am häufigsten verwendeten Gesten mit aufnehmen.
Hier habe ich noch ein Verständnisproblem der genauen Arbeitsweise des Flippers. Folgender Code kann erst einmal nur eine Ebene tief flippen:
Java:
public class MenuView extends ViewFlipper {
private int id = 1000;
public MenuView(final Context context, Menu menu) {
super(context);
final ListViewEx<MenuEntry> list = new ListViewEx<MenuEntry>(context);
list.addItems( menu.getMainPage().getEntries() );
list.setOnItemClickListener(new OnItemClickListener() {
// When clicked, show a toast with the TextView text
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MenuEntry item = (MenuEntry)list.getItemAtPosition(position);
int viewID = MenuView.this.id++;
final ListViewEx<MenuEntry> nextView = new ListViewEx<MenuEntry>(context);
nextView.addItems( item.getSubmenu().getEntries() );
nextView.setId(viewID);
MenuView.this.addView(nextView);
MenuView.this.setNextFocusDownId(viewID);
MenuView.this.showNext();
Toast.makeText(context, item.toString(), Toast.LENGTH_SHORT).show();
}
});
this.addView(list);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
super.onInterceptTouchEvent(event);
Log.e("SWIPED", "onInterceptTouchEvent : " + event.getAction());
if(event.getAction() == 2) {
//this.removeView(event.getSource());
this.showPrevious();
}
return false;
}
}
Ich erstelle im OnItemClickListener die nächste View in Abhängigkeit der jeweiligen Nutzereingabe.
Ich gebe der View eine eindeutige ID, welche für den nächsten Schritt automatisch hochgezählt wird.
Die View wird dem Flipper hinzugefügt, die vergebene ID dem Flipper als Identifizierung der nächsten View mitgeteilt und anschließend mit showNext() die View letztentlich gewechselt.
Kann der ViewFlipper jeweils nur zwischen zwei Views wechseln?
Wenn ich eine Ebene zurück gehe, dann muss ich die aktuelle View natürlich wieder entfernen.
Wie kann ich das realisieren? - Bekomme ich irgendwie über das MotionEvent die View über welche der Finger bewegt wurde?
Außerdem ist event.getAction() ungünstig, um den Swipe zu detektieren. - Aber eine Methode wie "getDirection()" kennt das MotionEvent nicht. Aus der Doku bin ich auch noch nicht schlau geworden... Google könnte mal ein Bespiel für die am häufigsten verwendeten Gesten mit aufnehmen.