【问题标题】:ExpandableListView with non-expandable itemsExpandableListView 带有不可扩展的项目
【发布时间】:2015-09-25 16:30:35
【问题描述】:

我正在尝试在具有其他不可扩展选项的导航抽屉中创建一个 ExpandableListView。我正在尝试创建如下内容:


所有谷物。 . . . . . . . . . . . V


归档谷物。 . . . . . V


设置


帮助和反馈


关于我们


“所有谷物”和“存档谷物”将具有下拉指示符,因为它们是有孩子的组,而“设置”、“关于我们”等将没有指示符。我仔细研究并想到了两种方法:修改适配器为空组填充不同的布局,以及在普通 ListView 上堆叠 ExpandableListView

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

在普通 ListView 上堆叠 ExpandableListView 也没有我希望的那样可行,因为我无法让 XML 与一个 DrawerLayout 中的两个列表协作。帮忙?

【问题讨论】:

    标签: android listview navigation-drawer expandablelistview indicator


    【解决方案1】:

    如果这些是静态元素,那么它可能不值得努力实现类似于 ViewItemType 的东西。您可以考虑将它们放在 listview 的 footerView 中。

    试试 listview.addFooterView(view);

    【讨论】:

      【解决方案2】:

      您的 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;
      }
      

      这样做是让前 2 个以下的元素没有子元素。由于他们没有孩子,他们无法扩张。 点击事件也将仅在位置条件下处理。

      至于让组指示器消失,我会在 getGroupView() 方法中从 xml 中扩充视图。这样,您在任何情况下都可以完全控制它的外观。 我希望这有帮助。祝你好运。

      【讨论】:

      • 感谢您的建议,但我已经为 groupView 提供了自定义视图。这是一个文本视图,简单明了,但无论如何添加了组指示器。关于原因有什么建议吗?
      • 我会尝试将转换视图的背景更改为@drawable 资源或颜色。这是讨论扩展标记控制的帖子的链接。 stackoverflow.com/questions/15501413/….
      猜你喜欢
      • 2014-09-15
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      相关资源
      最近更新 更多