Mettez en surbrillance l'élément sélectionné dans "ListFragment"?
J'ai posté le même problème une couple de fois, mais il n'a pas encore été résolu. J'ai un ListFragment
et je veux souligner l'élément sélectionné dans la liste. J'ai reçu des suggestions pour utiliser un "sélecteur". Je ne comprends pas comment utiliser ce sélecteur. Mon ListFragment
classe est:
//Create an adapter with list of stores and populate the list with
//values
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, StoreList);
setListAdapter(adapter);
mDbHelper.close();
}
/*
* (non-Javadoc)
*
* Handles the event when an item is clicked on left pane, performs action
* based on the selection in left pane
*
* @see android.app.ListFragment#onListItemClick(android.widget.ListView,
* android.view.View, int, long)
*/
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
String selectedStore = (String) getListAdapter().getItem(position);
DetailFragment fragment = (DetailFragment) getFragmentManager()
.findFragmentById(R.id.detailFragment);
if (fragment != null && fragment.isInLayout()) {
v.setBackgroundColor(getResources().getColor(R.color.BLUE));
//passes selectedStore to detail fragment
fragment.setText(selectedStore);
//getItemList(selectedStore);
}
À l'aide de setBackground définit la couleur de façon permanente, mais je veux qu'il s'en aille quand un autre élément est sélectionné.
Je comprends comment utiliser un sélecteur dans un ListView
mais dans mon cas, si je n'ai pas défini de code xml pour la Listview
, alors comment puis-je utiliser un "sélecteur"? Je suis à l'aide de android.R.layout.simple_list_item_1
qui est prédéfini.
source d'informationauteur Ayush Goyal
Vous devez vous connecter pour publier un commentaire.
La suite travaillé pour moi:
res/color/menu_highlight.xml
res/values/colors.xml:
res/layout/menuitem.xml:: (XML pour chaque élément de la liste)
Enfin, dans le ListFragment classe, ajoutez la Vue précédente et ajoutez le code suivant à la onlistitemclick fonction.. (mentionné dans ListFragment: mettez en surbrillance la ligne sélectionnée)
De votre
ListView
appelsetChoiceMode(ListView.CHOICE_MODE_SINGLE)
. Ensuite, chaque fois que vous voulez mettre en valeur un élément sélectionné, l'appelsetItemChecked(index, true)
.J'ai essayé la même chose et je n'ai pas trouvé de bonne solution.
Ce que j'ai réellement faire est d'utiliser ce code pour définir l'auditeur:
où la liste de l'adaptateur définit les méthodes publiques suivantes
Qui est, je l'ai changer l'arrière-plan de l'élément de la liste par programmation.
En outre, pour éviter l'effet de clignotement lors du clic sur un élément de liste, je ne définissez aucune sélecteur pour l'état enfoncé
Cela fonctionne comme prévu pour moi. Je n'ai pas trouvé de meilleure solution depuis setSelected(true) ne fonctionne pas sur les éléments de liste!
Je n'obtenais pas ce que je voulais donc j'ai continué à creuser et est venu avec un "pas cher" solution qui pourrait ne pas être la meilleure pratique, mais fait le travail.
Je voulais de l'élément mis en surbrillance lorsqu'il est sélectionné et la couleur doit s'en aller quand un autre élément est sélectionné à partir de la listFragment.
C'est ce qui a fonctionné pour moi - j'ai défini une statique
View V;
et initialisé il
V = new View(getActivity());
Ensuite, à l'intérieur de mon
onListItemClick(ListView l, la Vue vint position, long id)
Cela a fonctionné très bien pour moi dans le
ListFragment
mais je pense qu'il ne fonctionne que pour Android 4.0 et plus. J'ai créé une mise en page simple de l'élément de liste avecandroid:background="?android:attr/activatedBackgroundIndicator
(dans le cas d'Android ci-dessous 4.0, vous devez créer semblable dans un drawable):Et puis, il suffit de créer un simple
ArrayAdapter
à l'aide de cette mise en page et définissez le mode de choix de single:Après que vous pouvez mettre en avant l'élément nécessaire avec
setItemChecked
méthode:je code
après
bloc de code
Quelque chose de similaire au type-a1pha mais avec les sélecteurs, une fois que vous avez de l'affichage vous pouvez afficher.setSelected(true) et qui permettrait d'ajouter le style que vous avez défini sur votre sélecteur.
vous devez retirer le drapeau une fois que l'action est effectuée.