Je veux que mon ListView mette en évidence l'élément sélectionné jusqu'à ce que la sélection change. De plus, je veux être notifié lorsque la sélection change.
Afin d'accomplir la première tâche, j'appelle list.setChoiceMode(ListView.CHOICE_MODE_SINGLE)
.
Je ne suis pas sûr de savoir comment accomplir le second. Lorsqu'un élément de la liste est cliqué, mon OnItemSelectedListener n'est jamais notifié, et le OnItemClickListener est insuffisant parce qu'au moment où l'événement OnItemClick se produit, le checkedItem de ma ListView a été modifié, de sorte que je ne peux pas distinguer si l'événement de clic a entraîné un changement de sélection (il est possible/probable que l'élément cliqué était déjà sélectionné).
Une option serait de stocker l'index actuellement coché dans une variable membre, que je pourrais utiliser pour déterminer si l'événement de clic correspond à un changement de sélection. Mais cette solution laide et Donc, pour ce mode de choix, il y a certainement un moyen de faire cela avec les listeners fournis ?
public class Temp extends Activity implements OnItemClickListener, OnItemSelectedListener
{
ListView mView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
List<String> strings = new ArrayList<String>();
strings.add("1");
strings.add("2");
strings.add("3");
strings.add("4");
strings.add("5");
mView = new ListView(this);
mView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
mView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, strings));
mView.setItemChecked(0, true);
mView.setOnItemClickListener(this);
mView.setOnItemSelectedListener(this);
setContentView(mView);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
//this never gets called
Log.e("item selected", ""+position);
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
Log.e("nothing seleted", "");
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
//by the time this occurs, position == mView.getCheckedItemPosition()
Log.e("item clicked", ""+position);
}
}