Ich würde gerne wissen, was diese Zustände unterscheidet. Ich habe keine Webseite gefunden, die dies klarstellt.
android
android-view
selected
checked
Louis
quelle
quelle
Antworten:
Der Unterschied zwischen Aktiviert und Aktiviert ist eigentlich sehr interessant. Sogar die Google-Dokumentation ist entschuldigend (Hervorhebung unten hinzugefügt):
Hier ist also der Unterschied:
ListView (nach Honeycomb) ruft setChecked () ODER setActivated () auf, abhängig von der folgenden Android-Version (aus dem Android-Quellcode):
Beachten Sie die Variable mCheckStates. Es verfolgt, welche Positionen in Ihrer Liste aktiviert / aktiviert sind. Auf diese kann beispielsweise über getCheckedItemPositions () zugegriffen werden. Beachten Sie auch, dass ein Aufruf von ListView.setItemChecked () das Obige aufruft. Mit anderen Worten könnte es auch setItemActivated () heißen.
Vor Honeycomb mussten wir Problemumgehungen implementieren, um state_checked in unseren Listenelementen wiederzugeben. Dies liegt daran, dass ListView setChecked () NUR in der obersten Ansicht des Layouts aufruft (und Layouts nicht überprüfbar implementieren) ... und sich NICHT ohne Hilfe verbreitet. Diese Problemumgehungen hatten die folgende Form: Erweitern Sie das Root-Layout, um Checkable zu implementieren. Suchen Sie in seinem Konstruktor rekursiv alle untergeordneten Elemente, die Checkable implementieren. Wenn setChecked () etc ... aufgerufen wird, leiten Sie den Aufruf an diese Ansichten weiter. Wenn diese Ansichten Statuslisten-Drawables (z. B. ein Kontrollkästchen) mit einem anderen Drawable für state_checked implementieren, wird der überprüfte Status in der Benutzeroberfläche angezeigt.
Um einen schönen Hintergrund für ein Listenelement nach Honeycomb zu erstellen, müssen Sie lediglich eine Statusliste mit einer Zeichnungsliste für den Status state_activated wie folgt erstellen (und natürlich setItemChecked () verwenden):
Um einen schönen Hintergrund für ein Listenelement vor HoneyComb zu erstellen, müssen Sie für state_checked Folgendes tun, und Sie müssen AUCH Ihre oberste Ansicht erweitern, um die Checkable-Schnittstelle zu implementieren. Innerhalb dessen müssen Sie Android dann mitteilen, ob der von Ihnen implementierte Status wahr oder falsch ist, indem Sie onCreateDrawableState () implementieren und refreshDrawableState () aufrufen, wenn sich der Status ändert.
... und der Code zum Implementieren von Checkable in Kombination mit state_checked in einem RelativeLayout könnte sein:
Vielen Dank an:
http://sriramramani.wordpress.com/2012/11/17/custom-states/
Stackoverflow: So fügen Sie einen benutzerdefinierten Schaltflächenstatus hinzu
Stackoverflow: Benutzerdefinierte überprüfbare Ansicht, die auf Selector reagiert
http://www.charlesharley.com/2012/programming/custom-drawable-states-in-android/
http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList
http://blog.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/
quelle
Selection is a transient property, representing the view (hierarchy) the user is currently interacting with. Activation is a longer-term state that the user can move views in and out of. For example, in a list view with single or multiple selection enabled, the views in the current selection set are activated. (Um, yeah, we are deeply sorry about the terminology here.)
sourcesetItemChecked()
android:state_activated="true"
Laut dem Dokument :
android: state_selected Boolean . "
true
" wenn dieses Element verwendet werden soll, wenn das Objekt die aktuelle Benutzerauswahl ist, wenn Sie mit einem Richtungssteuerelement navigieren (z. B. wenn Sie mit einem Steuerkreuz durch eine Liste navigieren); "false
" wenn dieses Element verwendet werden soll, wenn das Objekt nicht ausgewählt ist. Der ausgewählte Status wird verwendet, wenn der Fokus (android: state_focused) nicht ausreicht (z. B. wenn die Listenansicht den Fokus hat und ein Element darin mit einem Steuerkreuz ausgewählt wird).android: state_checked Boolean . "
true
" wenn dieses Element verwendet werden soll, wenn das Objekt überprüft wird; "false
" wenn es verwendet werden soll, wenn das Objekt deaktiviert ist.android: state_activated Boolean . "
true
" wenn dieses Element verwendet werden soll, wenn das Objekt als dauerhafte Auswahl aktiviert ist (z. B. um das zuvor ausgewählte Listenelement in einer dauerhaften Navigationsansicht "hervorzuheben"); "false
" wenn es verwendet werden soll, wenn das Objekt nicht aktiviert ist. Eingeführt in API Level 11 .Ich denke, das Dokument ist ziemlich klar. Wo liegt also das Problem?
quelle
Hier ist eine andere Lösung für dieses Problem: https://github.com/jiahaoliuliu/CustomizedListRow/blob/master/src/com/jiahaoliuliu/android/customizedlistview/MainActivity.java
Ich habe die Methode setOnItemClickListener überschrieben und verschiedene Fälle im Code überprüft. Aber definitiv ist die Lösung von Marvin viel besser.
quelle