具有不可展开项的可展开列表视图

4

我正在尝试在我的导航抽屉中创建一个可展开的ExpandableListView,其中还有其他不可展开的选项。 我想创造以下这样的东西:


所有麦片......V


已存档的麦片...V


设置


帮助和反馈


关于我们


"所有麦片"和"已归档的麦片"会有下拉指示器,因为它们是具有子元素的组,而"设置"、"关于我们"等则没有指示器。 我已经搜索了整个网络并考虑了两种方法:修改适配器以充气空组的不同布局,或在普通ListView上叠加ExpandableListView。

修改适配器并不像我希望的那样可行,因为组指示器是自动附加的。 我不知道如何使自动附加的下拉指示器消失。 帮助?

将ExpandableListView堆叠在普通的ListView上也不像我希望的那样可行,因为我无法让XML与DrawerLayout中的两个列表合作。 帮助?

2个回答

2
如果这些元素是静态的,那么实现类似于ViewItemType的东西可能并不值得。您可以考虑将它们放在listview的footerView中。
尝试使用listview.addFooterView(view);

0

你的ExpandableListView将使用ExpandableListAdapter,其中将有一些方法可以帮助你很多。你可以在这个链接http://developer.android.com/reference/android/widget/ExpandableListAdapter.html中了解更多信息。从一开始就有一些位置不扩展,我过去所做的是覆盖ExpandableListAdaptor中的getChildrenCount()方法。然后为了指定点击行为,可以通过覆盖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;
}

这样做的效果是,第一个和第二个元素下面没有子元素。因为它们没有子元素,所以无法展开。 点击事件也只在特定位置上处理。

至于让组指示器消失,我建议在getGroupView()方法中从XML中填充一个视图。这样,您可以完全控制它在任何情况下的外观。 希望对您有所帮助。祝好运。


谢谢您的建议,但我已经为groupView提供了自定义视图。它是一个简单的文本视图,但组指示符仍然被添加了进去。有什么建议吗? - AlleyOOP
我会尝试将convertview的背景更改为@drawable资源或颜色。这是一个链接,讨论了控制扩展标记的问题。https://dev59.com/c2Up5IYBdhLWcg3wHkyo。 - wolfaviators

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接