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

#android #events #listview #onclick

#Android #Мероприятия #listview #onclick

Вопрос:

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

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

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

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

Комментарии:

1. Используете ли вы onItemClickedListener в списке или OnClickListener в представлении внутри представления заголовка?

2. да, я действительно использую onItemClickedListener в списке, но в headerView также есть OnClickListener для себя.

Ответ №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);
        }
    }
}
  

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