Comment ligne en surbrillance dans la vue liste dans Android?
J'ai besoin pour mettre en surbrillance une ligne dans une ListView
qui a été sélectionné (pour montrer à l'utilisateur ce qu'il a choisi), et donc, il n'est pas celui qui va être choisi, c'est celui qu'il a choisi avant.
J'ai déjà l'emplacement par:
ListView.setSelection(position);
Et maintenant, ce que je veux, c'est de sélectionner cette ligne spécifique et pour le mettre en surbrillance.
Le code de la onCreate()
dans l'activité qui contient le ListView
:
public class CountryView extends Activity
{
protected static final String LOG_TAG = null;
/** Called when the activity is first created. */
String[] lv_arr = {};
ListAdapter adapter;
TextView t;
private ListView lvUsers;
private ArrayList<Coun> mListUsers;
String responce=null;
public int d;
int selectedListItem = -1;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.country);
Intent data =getIntent();
mListUsers = getCoun();
lvUsers = (ListView) findViewById(R.id.counlistView);
lvUsers.setAdapter(new ListAdapter(this, R.id.counlistView, mListUsers));
selectedListItem=data.getExtras().getInt("PositionInList");
lvUsers.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lvUsers.setOnItemClickListener(new OnItemClickListener()
{
int positionItem;
public void onItemClick(AdapterView<?> parent, View view,int position, long id)
{
Intent pongIntent = new Intent(getApplicationContext(),Trav.class);
int counId=mListUsers.get(position).id;
pongIntent.putExtra("response",mListUsers.get(position).p);
pongIntent.putExtra("responseCounID",counId);
//Put the position of the choose list inside extra
positionItem=position;
pongIntent.putExtra("PositionInListSet",positionItem);
setResult(Activity.RESULT_OK,pongIntent);
Log.i("CounID *******************************"," "+counId);
finish();
}
});
}
}
Vous devez vous connecter pour publier un commentaire.
Depuis par défaut
ListViews
sont fixés à un mode de sélection deNONE
, en mode tactile lesetSelection
méthode n'aura pas d'effet visuel.Pour garder la sélection précédente /affichez une sélection explicite, vous devez d'abord définir votre listview le choix du mode de façon appropriée:
Il est utile de lire les Docs de l'API de ces méthodes:
Dans le cas où ce n'est pas assez de dire que vous aimeriez voir toujours la dernière sélection différemment à côté de la sélection en cours), vous devez stocker votre dernier élément sélectionné (une donnée qui renseigne les
ListAdapter
) commelastSelectedItem
, et de votre adaptateurgetView
méthode d'affecter une ressource d'arrière-plan pour le moteur de rendu si elle est égale à celastSelectedItem
.Si votre dernière sélection ne serait pas actualiser sur le changement de sélection, vous devez appeler explicitement la
notifyDataSetChanged
méthode sur votre instance de l'adaptateur.Mise à jour
Depuis votre activité contenant les
ListView
est un enfant d'une activité qui attend pour un résultat de (basé sur lasetResult(Activity.RESULT_OK,pongIntent);
partie), l'idée de départ est correct, la dernière position doit être passé au travers de l'objectif lors du démarrage de l'activité:La
ListView.CHOICE_MODE_SINGLE
solution serait de travailler si vous restez dans la même activité, mais vous êtes de finition sur tous les itemClick (changement de sélection), c'est pourquoi les données supplémentaires doivent être transmises au départIntent
.Vous pouvez également définir précédemment sélectionné, l'élément de fond de votre carte -comme mentionné ci-dessus, en remplaçant ses
getView
méthode:CHOICE_MODE_SINGLE
est assez.onCreate
méthode, vous devez régler lelistview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
, et vous n'avez même pas besoin de définir la sélection explicitement (listview.setSelection(position);
). Si cela ne fonctionne pas, merci de partager votre code, pour nous aider à détecter d'où le problème est enracinée. je vous remercie.stateListDrawable
en arrière-plan? Il semble que, si j'utiliseview.setSelected(true)
- il n'a pas d'effetJuste:
setChoiceMode
Définir un arrière-plan à l'appui de la sélection de l'état dans vous page de l'élément, comme:
FYI:
android:choiceMode="singleChoice"
, developer.android.com/reference/android/widget/...Il est beaucoup plus facile à mettre en œuvre dans vos fichiers de mise en page et de laisser Android occupe du reste...
1) assurez-vous d'avoir
android:choiceMode=""
ensemble sur votre ListView disposition (singleChoice
,multipleChoice
, etc). Par défaut, elle est définie ànone
.2) Créer un état sélecteur de fichier XML et de les enregistrer dans un drawable votre dossier. Dans cet exemple, nous allons l'appeler state_selector.xml:
3) Dans votre élément de la liste mise en page, ajouter le state_selector.xml le dossier de fond:
Si vous utilisez
multipleChoice
, vous pouvez remplaceronItemClick()
et définir/annuler les éléments sélectionnés en conséquence. Android va changer la couleur d'arrière-plan, comme spécifié dans votre state_selector.xml fichier.android:state_activated="true"
et je n'ai pas besoin deandroid:state_selected
. MERCI!!!!J'ai eu un problème pour trouver une solution de facilité, car si de nombreux tutoriels et des réponses contenaient de l'information sur un seul sélectionner via des boutons radio (Qui dépendait fortement du groupe de boutons).
Mon problème était que je pourrais définir l'élément à mon "mis en évidence" l'état, mais n'a pas de réinitialiser la liste lorsque l'élément suivant a été sélectionné. Voici ce que j'ai trouvé:
Avec cette classe:
- Je résoudre ce problème de la manière suivante:
1. définir un lastClickId, lorsque cliquez sur l'élément dans la liste, mise à jour de la lastClickId de valeur de position, puis la mise à jour de l'affichage d'arrière-plan.
Après cela, quand on clique sur un élément, cet élément sera mis en évidence, mais quand nous défiler la liste(faire l'article qui nous avons sélectionné hors de l'écran) et de revenir en arrière, le point culminant est parti, parce que la méthode getView() rediffusion dans votre adaptateur, donc, nous avons à faire autre chose.
2. dans votre carte, un changement de fond dans la méthode getView(), voici le code:
Adaptateur:
else view.setBackgroundResource(R.color.grey);
Pourquoi ne pas vous stocker les sélections dans un tableau, puis transmettez ce tableau dans le constructeur de la ListView Adaptateur Tableau, quelque chose comme
myArrayAdapter(context,layoutID,dataArray,selectionArray)
puis dans votre
getView
méthode pour la arrayadapter, il suffit de faire un chèque. Par exemple en pseudo-codeVous pouvez utiliser de la transition. Suivez mon code parce que j'ai réalisé en mettant en évidence de certains élément de liste par choix
Permet de dire que vous voulez mettre en surbrillance le premier élément pendant 5 secondes.
translate.xml
new_state.xml
original_state.xml
Si vous avez compris ce code, qui est très simple, je dois dire, puis l'élément de liste à zéro-ième position sera surligné en bleu de la couleur pendant 5 secondes, puis il ne sera lent fondu au blanc de couleur.
Le plus SIMPLE de tous