J’ai récemment commencé à utiliser des barres d’action android et des barres d’action contextuelles (CAB).
Je n’ai qu’une activité qui est une ListActivity. En gros, j’utilise le code suivant pour “activer” le CAB:
ListView listView = getListView(); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { // Here you can do something when items are selected/de-selected, // such as update the title in the CAB } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { // Respond to clicks on the actions in the CAB switch (item.getItemId()) { case R.id.menu_delete: deleteSelectedItems(); mode.finish(); // Action picked, so close the CAB return true; default: return false; } } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // Inflate the menu for the CAB MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.context, menu); return true; } @Override public void onDestroyActionMode(ActionMode mode) { // Here you can make any necessary updates to the activity when // the CAB is removed. By default, selected items are deselected/unchecked. } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // Here you can perform updates to the CAB due to // an invalidate() request return false; } });
La mise en page de la liste:
Et dans main.xml:
Maintenant, si je clique longuement sur un élément de la liste, le CAB apparaît comme prévu:
J’utilise un MultiChoiceModeListener mais malheureusement les éléments de liste sélectionnés ne changent pas l’arrière-plan comme dans l’exemple ici (fond bleu clair après la sélection d’un élément):
Dois-je utiliser un sélecteur personnalisé? Ou existe-t-il une procédure standard sur la façon dont Android gère cela et je dois juste rendre mes LinearLayouts transparentes? J’ai aussi essayé ce qui suit mais sans succès:
Arrière-plan de l’élément ListView via un sélecteur personnalisé
Ce serait génial Si quelqu’un pouvait me diriger dans la bonne direction. S’il vous plaît laissez-moi savoir si vous avez besoin de plus de code d’application ou de fichiers xml.
Je n’ai jamais testé cela que dans CHOICE_MODE_SINGLE, mais dans cette situation, cela fonctionne en procédant comme suit.
Lorsque vous sélectionnez un élément de liste, dans le code, appelez la méthode “setItemChecked (position, checked)” (sur l’instance ListView) pour cet élément dans la liste.
Ajoutez ceci au XML pour les éléments ListView individuels:
android:background="?android:attr/activatedBackgroundIndicator"
Créez simplement un dessin appelé custom_background en cours de route:
et définir comme arrière-plan sur la mise en page parent:
android:background="@drawable/custom_background"
J’essaie uniquement de prendre en charge les périphériques ICS et plus, mais cette nouvelle présentation fait ce que vous essayez de faire, en maintenant la ligne sélectionnée en surbrillance.
adapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_activated_1, null, from, to, 0);
Pour quiconque rencontre encore ce problème, veuillez vérifier votre Android: minSdkVersion. S’il est trop bas, la couleur de fond du sélecteur peut ne pas fonctionner.