2012-04-04 13 views
5

Ich möchte ein ListView haben, dass, wenn ich auf das Element klicke, die Ansicht nach links gleitet. SoWie animiert man das Objekt in ListView, wenn man darauf klickt?

ich habe:

listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      arg1.startAnimation(openAnimation); 
     } 
    }); 

jedoch Animation auf das verschiedene Element in der Liste angewandt statt der angeklickt auf. Das Verhalten scheint zufällig zu sein, da es manchmal zu mehr als einem Objekt gleichzeitig passiert ist.

Wie ich vermutete, ist dies wegen der Art und Weise, wie der Adapter wieder verwendet wird, um das Element zu erstellen. Ich ging, um die getView-Methode in meinem Adapter zu ändern, um jedes Mal, wenn es aufgerufen wird, die neue Ansicht aufzublähen. Dann kommt die Animation nicht mehr vor.

Gibt es eine Möglichkeit, dies zu beheben? Ich habe versucht, die Animation in meinen Adapter zu verschieben, aber dann kann ich sie nicht mit anderen Aktionen in der Listview verknüpfen.

Schließlich möchte ich das Element anklickbar sein, aber beim Streichen nach links/rechts zeigen Sie die Schaltfläche Löschen (iOS Verhalten löschen). Bin ich hier auf der falschen Spur? Dies sollte jedoch möglich sein, da Android Swipe zum Entfernen in der Benachrichtigungsleiste implementieren kann.

+0

"iOS-Löschverhalten" NEIN NEIN NEIN NEIN! Android ist kein iOS! Bitte verwenden Sie keine iOS-Designmuster. Android-Nutzer erwarten und Android User Experience NICHT und iPhone erleben. – slayton

+0

Ich verstehe Ihre Bedenken. Ich bin total gegen diese Idee. Aber ich bin nicht diejenige, die hier eine Entscheidung trifft. Aber du musst es zugeben, wischen, um zu entfernen, gibt es auf Android. Die Implementierung ist da, nur unterschiedliche Darstellung. – RobGThai

+0

Das Benachrichtigungsfenster verfügt wahrscheinlich über eine benutzerdefinierte Implementierung einer Listenansicht, da die grundlegende Listenansichtsklasse dieses Streichen zum Löschen des Verhaltens nicht unterstützt. – slayton

Antwort

1

Ich empfehle, dass Sie auch this Thread überprüfen.

Ich glaube nicht, dass dies möglich ist, ohne Ihren Adapter für diese Art von Verhalten zu ändern. Soweit ich weiß, haben Sie keine Probleme damit, den Code zu implementieren, der die Swipe-Gesten in verschiedenen ListView-Zeilen erkennt, nur mit der Animation sollte diese Geste auf entsprechende Zeile (n) folgen.

Ich würde den Adapter neu schreiben, um mindestens 2 Zeilentypen zu passen: normale Zeilen und zu löschende Zeilen. In der Methode "getView()" Ihres Adapters sollten Sie nur die convertView von normalen Views wiederverwenden. Zeilen, die gelöscht werden sollen, sollten sie nicht wiederverwenden, sodass das Animieren der anderen nicht geändert wird. Nachdem Sie auf eine normale Zeile geklickt haben, sollten Sie dem Adapter zuerst mitteilen, dass die Zeile an der angeklickten Position jetzt vom zu löschenden Typ ist, rufen Sie .notifyDatasetChanged() auf und starten Sie dann die Animation für diese Zeile.

+0

Wie starte ich eine Animation nur in dieser Zeile? Ich bin View v = inflater.inflate (R.layout.list_view_custom, null); und dann habe ich in einem Listener final Animation animation = AnimationUtils.loadAnimation (parent.getContext(), R.anim.fade_in_expand); v.startAnimation (Animation); Aber nichts passiert. – MinceMan

Verwandte Themen