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
AddToBackStack () не работает. Вернуться на главную не предыдущий фрагмент Как предотвратить захват экрана в Android Попытка вызвать виртуальный метод «java.lang.Class java.lang.reflect.Field.getType ()» в ссылке на нулевой объект Зачем использовать «обычные» фрагменты, если у вас есть пакет совместимости с Android? Android: проведите пальцем влево или вправо, чтобы просмотреть слайд-шоу Android – HttpUrlConnection не закрывается. В результате результаты SocketException Воспроизвести список mp3-файлов с помощью MediaPlayer в Android Android – как получить уведомление при завершении синхронизации при запросе синхронизации с ContentResolver.requestSync () Android: Загрузить объект Можно ли сжимать видео на Android? Как определить, видно ли вид в ListView? Есть ли библиотека редактирования видео, доступная в Android Преобразование миллисекунд в TDateTime в Java Исключить .jar из компиляции в Android Studio с Gradle PhoneStateListener onMessageWaitingIndicatorChanged () не называется надежно