Представление заголовка Android ListView не может реагировать на событие щелчка, иногда, когда представление заголовка получает фокус в режиме клавиатуры, затем щелкните его в сенсорном режиме.

Представление заголовка Android ListView не может реагировать на событие щелчка, иногда, когда представление заголовка получает фокус в режиме клавиатуры, затем щелкните его в сенсорном режиме. Шаги для репозитория этого сценария: 1. прокрутите список до тех пор, пока заголовок не исчезнет из поля зрения 2. сделайте так, чтобы заголовок получил фокус в режиме клавиатуры 3. щелкните заголовок в сенсорном режиме, тогда заголовок может реагировать только на сенсорное событие и не может реагировать нажать событие. Но на некоторых устройствах этот сценарий невозможен.

Ожидайте: заголовок может реагировать на событие клика в любое время, когда мы его видим

Версия Android: 2.2/2.3 Устройство: некоторые устройства с трекболом или жесткой клавиатурой

Мне нужно, чтобы заголовок мог реагировать на событие щелчка в любое время. Итак, кто-то может выяснить причину этого сценария? и дать мне несколько советов, чтобы исправить это? Любая подсказка ценится, спасибо заранее.


person user1004791    schedule 20.10.2011    source источник
comment
Используете ли вы onItemClickedListener в списке или onClickListener в представлении внутри представления заголовка?   -  person FunkTheMonk    schedule 20.10.2011
comment
да, я действительно использую onItemClickedListener в списке, но у HeaderView также есть onClickListener для себя.   -  person user1004791    schedule 21.10.2011


Ответы (1)


У меня такая же проблема. Я не знаю, почему он ведет себя странно, но я смог решить проблему, не используя addHeaderView().

Просто добавьте заголовок из адаптера как часть строки: mListView.setItemsCanFocus(true);

@Override
public int getItemViewType(int position) {
    return position == 0 ? 0 : 1;
}

@Override
public int getViewTypeCount() {
    return 2;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        if (getItemViewType(position) == 0) {
            LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.music_list_header_view_2, null);
        } else {
            LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.music_favorite_list_row, null);
        }
    }
}

Надеюсь, поможет!

person user2042130    schedule 07.02.2013