На Android 2.2 происходит следующее:
У меня есть ListActivity, где можно выбрать один элемент. Я регистрирую 1) onClickItemListener и
2) слушатель onItemLongClick
для ListView в ListView. На itemClick я просто устанавливаю элемент списка, по которому щелкают, как выбранный. На itemLongClick, я хочу сделать то же самое и дополнительные шаги. Моя проблема заключается в том, что вызов view.setSelected (true) из onItemLongClickListener не работает - элемент в ListView не выбирается. Это происходит, даже когда один и тот же метод вызывается одним и тем же слушателем! Смотрите код ниже:
/*
* Set the onClickListeners for the ListView items.
*/
this.listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
itemClick(view, position);
}
});
this.listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
itemClick(view, position);
return true;
}
});
/*
* Basic procedure when the user clicks
* an item in the list.
*/
private void itemClick(View view, int position) {
view.setSelected(true);
selectedPosition = position;
selectedView = view;
}
Здесь onItemLongClickListeners возвращает true, чтобы предотвратить образование пузырьков кликов до onClickListener. Любая помощь будет принята с благодарностью!
EDIT:
Получается
view.setSelected(true);
никогда не получалось так, как я думал. Стандартной функциональностью ListActivity было постоянное выделение элемента для меня в приведенном выше коде и вызов метода view.setSelected (), который никогда не выбирал элемент в ListView. Замена метода следующим образом решает мою проблему:
/*
* Basic procedure when the user clicks
* an item in the list.
*/
private void itemClick(View view, int position) {
getListView().setItemChecked(position, true);
selectedPosition = position;
selectedView = view;
}
Спасибо за Джимбо за полезные уточняющие вопросы!