ExpandableListView с нерасширяемыми элементами

Я пытаюсь создать ExpandableListView в своем навигационном ящике с другими, не расширяемыми параметрами. Я пытаюсь создать что-то вроде ниже:


Все крупы. . . . . . . . . . . . В


Зерновые в архиве. . . . . . В


Настройки


Помощь и обратная связь


О нас


"Все хлопья" и "Сохраненные хлопья" будут иметь индикатор раскрывающегося списка, потому что они представляют собой группы с детьми, а "Настройки", "О нас" и т. д. индикатора не будет. Я все просмотрел и подумал о двух подходах: изменение адаптера для создания другого макета для пустых групп и наложение ExpandableListView на обычный ListView.

Изменение адаптера оказалось не таким целесообразным, как я надеялся, потому что индикатор группы прикрепляется автоматически. Я не могу понять, как отключить автоматическое прикрепление выпадающего индикатора. Помощь?

Размещение ExpandableListView в обычном ListView оказалось не таким жизнеспособным, как я надеялся, потому что я не мог заставить XML работать с двумя списками в одном DrawerLayout. Помощь?


person AlleyOOP    schedule 07.07.2015    source источник


Ответы (2)


Если это статические элементы, то, вероятно, не стоит пытаться реализовать что-то похожее на ViewItemType. Вы можете поместить их в нижний колонтитул списка.

Попробуйте listview.addFooterView(view);

person Peanuts    schedule 07.07.2015

Ваш ExpandableListView будет использовать ExpandableListAdapter, который будет иметь несколько методов, которые вам очень помогут. вы можете узнать больше о них по этой ссылке http://developer.android.com/reference/android/widget/ExpandableListAdapter.html. Начиная с того, что некоторые позиции не расширялись, в прошлом я переопределил метод getChildrenCount() в ExpandableListAdaptor. Затем, чтобы указать поведение щелчка, это можно сделать, переопределив метод getGroupViewMethod. Ваш адаптер может выглядеть примерно так:

public class MyAdapter extends BaseExpandableListAdapter {
...
@Override
//This is where we tell the list not to expand on any position beyond the first 2
public int getChildrenCount(int position) {
switch(position)
{
case 0:
//Expands with the size of the cereal array
return cerealArray.size();
case 1:
//Expands with the size of the Archived Cereal Array
return archivedCerealArray.size();
default:
//List does not expand
return 0;
 }
...
@Override
public View getGroupView(int groupPosition,boolean isExpanded,View convertView,ViewGroup parent)
{
if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.kat_layout, null);
        }
 ImageView arrow = (ImageView)convertView.findViewById(R.id.arrowImage);
//Test for position
switch (groupPosition)
{
  case 0:
 //set arrow visibility to visible
arrow.setVisibility(View.VISIBLE);
 break;
 case 1:
 //set arrow visibility to visible
 arrow.setVisibility(View.VISIBLE);
 break;
 case 2:
 //hide arrow
arrow.setVisibility(View.INVISIBLE);
 convertView.setOnClickListener(new OnClickListener()
      {
      @Override
      public void onClick(View v){
      //Navigate to settings
     }
  }
  break;
 case 3:
 //hide arrow
arrow.setVisibility(View.INVISIBLE);
 convertView.setOnClickListener(new OnClickListener()
      {
      @Override
      public void onClick(View v){
      //Help and feedback
     }
  }
  break;
 case 4:
 //hide arrow
arrow.setVisibility(View.INVISIBLE);
  convertView.setOnClickListener(new OnClickListener()
      {
      @Override
      public void onClick(View v){
      //About us
     }
  }
  break;

}
return convertView;
}

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

Что касается того, чтобы индикатор группы исчез, я бы раздул представление из xml в методе getGroupView(). Таким образом, у вас есть полный контроль над тем, как это выглядит в любом случае. Надеюсь, это поможет. Удачи.

person wolfaviators    schedule 08.07.2015
comment
Спасибо за предложение, но я уже предоставил собственное представление для groupView. Это было текстовое представление, простое и понятное, но индикатор группы все равно был добавлен. Любые предложения относительно того, почему? - person AlleyOOP; 08.07.2015
comment
Я бы попробовал изменить фон для convertview на ресурс @drawable или цвет. Вот ссылка на сообщение, в котором обсуждается управление маркерами расширения. stackoverflow.com/questions/15501413/. - person wolfaviators; 08.07.2015