ListActivity view.setSelected (true) не зарегистрирован, если вызвано onItemLongClickListener - PullRequest
2 голосов
/ 16 ноября 2011

На 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;
    }

Спасибо за Джимбо за полезные уточняющие вопросы!

...