GroupPosition в ExpandableListView дает мне неправильное значение

РЕДАКТИРОВАТЬ

Я нашел решение, см. Ниже.

ОРИГИНАЛ:

Я создал ExpandableListView и выглядит так:

  • Группа 0 – ребенок 0, ребенок 1, ребенок 2
  • Группа 1 – ребенок 0, ребенок 1, ребенок 2, ребенок 3
  • Группа 2 – ребенок 0, ребенок 1, ребенок 2
  • Группа 3 – ребенок 0, ребенок 1, ребенок 2, ребенок 3, ребенок 4

Каждый вид группы имеет вид просмотра 3 ~ 5, и я принудительно расширяю все групповые представления,

 mExpandableListView = (ExpandableListView) mView.findViewById(R.id.expandable_list); CollectionExpandableListAdapter adapter = new MyExpandableListAdapter(getActivity(), mGroups, mProdChild); adapter.setInflater(LayoutInflater.from(getActivity().getBaseContext()), getActivity()); mExpandableListView.setAdapter(adapter); mExpandableListView.setGroupIndicator(null); for (int i = 0; i < groupList.size() - 1; i++) { mExpandableListView.expandGroup(i); } 

Кроме того, вот мой код адаптера:

 public class MyExpandableListAdapter extends BaseExpandableListAdapter { private ArrayList<String> mGroupItem; private ArrayList<ProductListData> mTempChild = new ArrayList<ProductListData>(); private ArrayList<Object> mChildItem = new ArrayList<Object>(); private LayoutInflater mInflater; private Activity mActivity; private ImageLoader mImageLoader; public CollectionExpandableListAdapter(Activity context, ArrayList<String> grList, ArrayList<Object> childItem) { mGroupItem = grList; mChildItem = childItem; mActivity = context; mImageLoader = new ImageLoader(mActivity); } public void setInflater(LayoutInflater inflater, Activity activity) { mInflater = inflater; mActivity = activity; } @Override public ProductListData getChild(int groupPosition, int childPosition) { return ((ArrayList<ProductListData>) mChildItem.get(groupPosition)).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { mTempChild = (ArrayList<ProductListData>) mChildItem.get(groupPosition); if (convertView == null) { convertView = mInflater.inflate(R.layout.adapter_collection_row_child, null); } ... return convertView; } @Override public int getChildrenCount(int groupPosition) { return ((ArrayList<ProductListData>) mChildItem.get(groupPosition)).size(); } @Override public Object getGroup(int groupPosition) { return mGroupItem.get(groupPosition); } @Override public int getGroupCount() { return mGroupItem.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup arg3) { Log.d("LOG", "Group position : " + groupPosition); if (convertView == null) { convertView = mInflater.inflate(R.layout.group_row_layout, null); } ... return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int arg0, int arg1) { return false; } @Override public void onGroupCollapsed(int groupPosition) { super.onGroupCollapsed(groupPosition); } @Override public void onGroupExpanded(int groupPosition) { super.onGroupExpanded(groupPosition); } } 

Создание expandableListView работает нормально, но я продолжаю получать значение 0 в getGroupView() при прокрутке списка. В моем logcat я ожидал увидеть groupPosition как 0, 1, 2, 3, 4.. (когда я прокручиваю вниз), но на самом деле он показывает 0, 0, 0, 1, 0, 2, 0, 3, 0, 4.. который имеет дополнительные 0 перед каждой groupPosition . Это происходит только при первом прокрутке, поэтому, если я несколько раз прокручиваю вверх и вниз, это не показывает дополнительного значения 0.

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

Решение

Моя проблема была в Listview . Я изменил layout_height на match_parent , и ошибка исчезла! Я нашел решение здесь .

Однажды у меня возникла аналогичная проблема, получив неправильные взгляды. Не уверен, что это так, но я сделал это, чтобы прокомментировать / удалить строку:

 if (convertView == null) { 

Как в методе getGroupView, так и в методе getChildView в списке.

И ofc соответствующие концевые фигурные скобки.

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

Intereting Posts