Андроид expandablelistview не расширяет или не получает события кликов

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

Я знаю, что есть много сообщений по этой теме, но я прочитал их все и пробовал много вещей, и мне не повезло, надеюсь, что я пропустил небольшую ошибку, которую легко заметить кому-то еще.

Основная деятельность:

public class ForumListActivity extends Activity { private static ArrayList<Forum> forumList; private static ArrayList<ArrayList<SubForum>> subForumList; private ExpandableListView forumListView; private ForumListAdapter forumListAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main_page); this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); forumListView = (ExpandableListView) this.findViewById(R.id.main_page_forum_list); forumList = new ArrayList<Forum>(); subForumList = new ArrayList<ArrayList<SubForum>>(); setUpForums(this); forumListAdapter = new ForumListAdapter(this, forumList, subForumList); forumListView.setAdapter(forumListAdapter); forumListView.setOnGroupExpandListener(new OnGroupExpandListener(){ @Override public void onGroupExpand(int groupPosition) { Log.d("onGroupExpand", "this works?"); for(int i=0; i<forumListAdapter.getGroupCount(); i++) { if(i != groupPosition) forumListView.collapseGroup(groupPosition); } } }); forumListView.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { Log.d("onGroupClick:", "worked"); parent.expandGroup(groupPosition); return true; } }); } 

Примечание: метод setUpForums () просто берет системные массивы и помещает их в listList и subForumList

ListViewAdapter:

 public class ForumListAdapter extends BaseExpandableListAdapter { private ArrayList<Forum> groups; private ArrayList<ArrayList<SubForum>> children; private Context ctx; public ForumListAdapter(Context ctx, ArrayList<Forum> groups, ArrayList<ArrayList<SubForum>> children) { this.ctx = ctx; this.groups = groups; this.children = children; } @Override public Object getChild(int groupPosition, int childPosition) { return children.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(ctx); convertView = inflater.inflate(R.layout.forum_list_child_item_row, null); } SubForum currentSubForum = children.get(groupPosition).get(childPosition); TextView name = (TextView)convertView.findViewById(R.id.child_row_forum_title); TextView desc = (TextView)convertView.findViewById(R.id.child_row_forum_description); if (name != null) name.setText(currentSubForum.getName()); if (desc != null) desc.setText(currentSubForum.getDescription()); convertView.setFocusableInTouchMode(true); return convertView; } @Override public int getChildrenCount(int groupPosition) { return children.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return groups.get(groupPosition); } @Override public int getGroupCount() { return groups.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(ctx); convertView = inflater.inflate(R.layout.forum_list_group_item_row, null); } Forum currentForum = (Forum) groups.get(groupPosition); TextView name = (TextView) convertView.findViewById(R.id.group_item_forum_title); //ImageView image = (ImageView) convertView.findViewById(R.id.group_item_expander_image); if(name != null) name.setText(currentForum.getName()); /* if(image != null) { int[][] group_state_sets = {{}, {android.R.attr.state_expanded}}; image.setVisibility(View.VISIBLE); int stateSetIndex = (isExpanded ? 1 : 0) ; Drawable drawable = image.getDrawable(); drawable.setState(group_state_sets[stateSetIndex]); } */ return convertView; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } 

Групповой макет:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/turquoise_gradient" android:orientation="horizontal" android:paddingTop="6dip" android:paddingBottom="6dip" android:paddingLeft="6dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/turquoise_gradient" android:orientation="vertical" android:padding="2dip" > <TextView android:id="@+id/group_item_forum_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical|left" android:gravity="left" android:paddingLeft="5dip" android:textColor="@color/white" android:textSize="16dip" /> </LinearLayout> <!-- <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center|right"> <ImageView android:id="@+id/group_item_expander_image" android:focusable="false" android:focusableInTouchMode="false" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/collapse_down" /> </LinearLayout> --> </LinearLayout> 

Макет ребенка:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/turquoise_gradient" android:orientation="horizontal" android:paddingTop="6dip" android:paddingBottom="6dip" android:paddingLeft="6dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="2dip" android:background="@drawable/turquoise_gradient" > <TextView android:id="@+id/child_row_forum_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left" android:layout_gravity="center_vertical" android:paddingLeft="5dip" android:textColor="@color/white" android:maxLines="1" android:textSize="11dip" /> <TextView android:id="@+id/child_row_forum_description" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left" android:layout_gravity="center_vertical" android:paddingLeft="15dip" android:textColor="@color/white" android:maxLines="2" android:textSize="11dip" /> </LinearLayout> </LinearLayout> 

Макет главной страницы:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/black" android:orientation="vertical" > <ExpandableListView android:id="@+id/main_page_forum_list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/black" android:divider="@color/black" android:dividerHeight="1dip" android:clickable="true" /> </LinearLayout> 

Любая помощь, которую вы можете предоставить, очень ценится!

Solutions Collecting From Web of "Андроид expandablelistview не расширяет или не получает события кликов"

Я также столкнулся с подобной проблемой, как вы. После нескольких дней расследования я обнаружил, что сделал что-то не так. Поэтому я исправил его для правильной работы, сделав небольшие изменения.

Давайте посмотрим на тело boolean onGroupClick(...) в setOnGroupClickListener . Вы вернули true, это означает, что «щелчок был обработан»

Вы должны вернуть false, если хотите расширить. Поэтому я предлагаю вам сделать следующее:

 forumListView.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { Log.d("onGroupClick:", "worked"); parent.expandGroup(groupPosition); return false; } }); 

В классе android.widget.ExpandableListView существует метод с именем boolean handleItemClick(View v, int position, long id) который отвечает за расширение / свертывание групп или передачу щелчка на правильный дочерний элемент.

  /* It's a group click, so pass on event */ if (mOnGroupClickListener != null) { if (mOnGroupClickListener.onGroupClick(this, v, posMetadata.position.groupPos, id)) { posMetadata.recycle(); return true; } } /* expanding/collapsing/other tasks... */ 

Если вы реализуете onGroupClick для возврата true , код ниже 8-й строки никогда не будет выполнен. (Это означает, что группы никогда не будут свернуты, расширены)

Надеюсь, мой ответ помог вам 🙂 удачи!

Если у вас есть виджет в элементе списка, например Button, вам может потребоваться добавить android:focusable="false" . Кнопка не позволяла щелкнуть мой элемент списка. Это было в моем случае.

Вероятно, есть три вещи, которые нужно проверить,

  1. Проверьте, есть ли у вас какие-либо данные, доступные для chid, потому что, если у вас нет данных, ребенок не появится вообще.

2.try удаление, если проверка состояния при использовании разметки

  if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(ctx); convertView = inflater.inflate(R.layout.forum_list_child_item_row, null); } 
  1. Вам нужно также пройти Viewgroup здесь

      convertView = inflater.inflate(R.layout.forum_list_child_item_row,parent, false); 

Убедитесь, что у вашего пользовательского группового макета нет android:textIsSelectable="false" как "true", если текст в текстовом представлении установлен на выбор, расширяемое listview будет расширяться в пряниках, но не в jellybean, и может также не работать в ICS.

У меня была аналогичная проблема, и она была решена путем удаления свойства android:clickable="true" из ExpandableListView в xml.

Я знаю, что на это уже был дан ответ, но попробуйте установить базовый макет того, что вы раздуваете, чтобы иметь атрибут:

 android:descendantFocusability="blocksDescendants" 

Когда вы работаете с расширяемыми списками, группа group по умолчанию работает по умолчанию. Означает, что группа будет расширяться только тогда, когда вы нажмете на нее, которую вам не нужно перегружать onGroupExpand (int groupPosition), или какой-либо другой метод просто заполнит ваши данные в вашем списке примерно так:

  public class MyActivity extends Activity { private ExpandableListView forumListView; private ForumListAdapter forumListAdapter; String[] forumList={"group 1","group 2","group 3"}; String[][] subForumList={{"group 1 child1","group 1 child1","group 1 child3"}, {"group 2 child1","group 2 child2","group 2 child3"}, {"group 3 child1","group 3 child2","group 3 child3"}, }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); forumListView = (ExpandableListView) this.findViewById(R.id.main_page_forum_list); forumListAdapter = new ForumListAdapter(this, forumList, subForumList); forumListView.setAdapter(forumListAdapter); /* forumListView.setOnGroupExpandListener(new OnGroupExpandListener(){ public void onGroupExpand(int groupPosition) { Log.d("onGroupExpand", "this shit works?"); for(int i=0; i<forumListAdapter.getGroupCount(); i++) { if(i != groupPosition) forumListView.collapseGroup(groupPosition); } } }); forumListView.setOnGroupClickListener(new OnGroupClickListener() { public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { Log.d("onGroupClick:", "worked"); parent.expandGroup(groupPosition); return true; } });*/ } public class ForumListAdapter extends BaseExpandableListAdapter { String[] groups; String[][] children; private Context ctx; public ForumListAdapter(Context ctx, String[] groups, String[][] children) { this.ctx = ctx; this.groups = groups; this.children = children; } public Object getChild(int arg0, int arg1) { // TODO Auto-generated method stub return children[arg0][arg1]; } public long getChildId(int arg0, int arg1) { // TODO Auto-generated method stub return arg1; } public View getChildView(int arg0, int arg1, boolean arg2, View arg3, ViewGroup arg4) { if (arg3 == null) { LayoutInflater inflater = LayoutInflater.from(ctx); arg3 = inflater.inflate(R.layout.child, null); } String childData = children[arg0][arg1]; TextView name = (TextView)arg3.findViewById(R.id.child_row_forum_title); TextView desc = (TextView)arg3.findViewById(R.id.child_row_forum_description); if (name != null) name.setText(childData); if (desc != null) // desc.setText(currentSubForum.getDescription()); arg3.setFocusableInTouchMode(true); return arg3;} public int getChildrenCount(int arg0) { // TODO Auto-generated method stub return children[arg0].length; } public Object getGroup(int arg0) { // TODO Auto-generated method stub return groups[arg0]; } public int getGroupCount() { // TODO Auto-generated method stub return groups.length; } public long getGroupId(int arg0) { // TODO Auto-generated method stub return arg0; } public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) { if (arg2 == null) { LayoutInflater inflater = LayoutInflater.from(ctx); arg2 = inflater.inflate(R.layout.group, null); } TextView name = (TextView) arg2.findViewById(R.id.group_item_forum_title); //ImageView image = (ImageView) arg2.findViewById(R.id.group_item_expander_image); if(name != null) name.setText(groups[arg0]); /* if(image != null) { int[][] group_state_sets = {{}, {android.R.attr.state_expanded}}; image.setVisibility(View.VISIBLE); int stateSetIndex = (isExpanded ? 1 : 0) ; Drawable drawable = image.getDrawable(); drawable.setState(group_state_sets[stateSetIndex]); } */ return arg2;} public boolean hasStableIds() { // TODO Auto-generated method stub return false; } public boolean isChildSelectable(int arg0, int arg1) { // TODO Auto-generated method stub return false; } } } 

ForumListView.collapseGroup ( groupPosition );

должно быть

ForumListView.collapseGroup ( i );

Добавить implements OnGroupExpandListener к вашей деятельности. Тогда это будет работать. Я использую то же самое, он отлично работает.