Intereting Posts
Android: Где скрывается атрибут цвета текста виджета Spinner? Пользовательский вид не может получить дескриптор Activity из View.getContext Расположение координатора с viewpager с recyclerview как адаптер Clear BitMap Cache – ионный ион Дизайн фрагмента: Адаптация к нескольким макетам экрана путем отображения / скрытия фрагментов в рамках одного действия? Android – просмотр камеры Помощь в получении String Array из файла arrays.xml Панель инструментов на панели инструментов Android с иконкой WhatsApp Изменение ориентации экрана в Android без перезагрузки Сериализация SparseArray <T> с помощью GSON Может ли автономный режим FireBase использоваться только для localstorage? Почему элементы изменяют порядок при прокрутке в Android GridView? Вызов активности из приложения из другого приложения android Как скомпилировать AndroidAnnotations с помощью Google Gradle Plugin? Квадратный модифицированный сервер макет для тестирования

Детальные элементы ExpandableListView не получают фокус при касании

Итак, я написал ExpandableListView и подклассу BaseExpandableListAdapter … Все работает отлично, но я не могу заставить дочерние представления делать фокус при нажатии. Если я использую трекбол, все будет хорошо. Но если я попытаюсь нажать на ребенка, я не получаю никакой обратной связи.

Я пробовал настройку android: focusable, android: focusableInTouchMode и android: clickable (и я также попытался установить это с помощью кода), но я не могу заставить что-то работать. Есть идеи?

Вот мой код адаптера:

public class ExpandableAppAdapter extends BaseExpandableListAdapter { private PackageManager m_pkgMgr; private Context m_context; private List<ApplicationInfo> m_groups; private List<List<ComponentName>> m_children; public ExpandableAppAdapter(Context context, List<ApplicationInfo> groups, List<List<ComponentName>> children) { m_context = context; m_pkgMgr = m_context.getPackageManager(); m_groups = groups; m_children = children; } @Override public Object getChild(int groupPos, int childPos) { return m_children.get(groupPos).get(childPos); } @Override public long getChildId(int groupPos, int childPos) { return childPos; } @Override public int getChildrenCount(int groupPos) { return m_children.get(groupPos).size(); } @Override public View getChildView(int groupPos, int childPos, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(m_context); convertView = inflater.inflate(R.layout.expandable_app_child_row, null); } ComponentName child = (ComponentName)getChild(groupPos, childPos); TextView txtView = (TextView)convertView.findViewById(R.id.item_app_pkg_name_id); if (txtView != null) txtView.setText(child.getPackageName()); txtView = (TextView)convertView.findViewById(R.id.item_app_class_name_id); if (txtView != null) txtView.setText(child.getClassName()); convertView.setFocusableInTouchMode(true); return convertView; } @Override public Object getGroup(int groupPos) { return m_groups.get(groupPos); } @Override public int getGroupCount() { return m_groups.size(); } @Override public long getGroupId(int groupPos) { return groupPos; } @Override public View getGroupView(int groupPos, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(m_context); convertView = inflater.inflate(R.layout.expandable_app_group_row, null); } ApplicationInfo group = (ApplicationInfo)getGroup(groupPos); ImageView imgView = (ImageView)convertView.findViewById(R.id.item_selection_icon_id); if (imgView != null) { Drawable img = m_pkgMgr.getApplicationIcon(group); imgView.setImageDrawable(img); imgView.setMaxWidth(20); imgView.setMaxHeight(20); } TextView txtView = (TextView)convertView.findViewById(R.id.item_app_name_id); if (txtView != null) txtView.setText(m_pkgMgr.getApplicationLabel(group)); return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPos, int childPos) { return true; } } 

Заранее спасибо!

Хорошо, я, наконец, понял это!

На самом деле это связано с моим XML-файлом, а не с моим адаптером (я отобразил адаптер, чтобы показать, что я вызывал setFocusableInTouchMode при создании дочернего представления).

Учебник, который я использовал (не помню, какой он был), заставил меня установить высоту ребенка:

 android:layout_height="?android:attr/listPreferredItemHeight" 

Как только я изменил его на просто wrap_content, все стало нормально работать.