具有不可扩展项的ExpandableListView

时间:2015-07-07 23:38:36

标签: android listview navigation-drawer expandablelistview indicator

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

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

存档的谷物。 。 。 。 。 。 V

设置

帮助和反馈

关于我们

“所有谷物”和“存档谷物”都有下拉指示器,因为它们是有孩子的组,而“设置”,“关于我们”等不会有指示器。我已经全神贯注地想到了两种方法:修改适配器以为空组扩展不同的布局,并且在普通ListView上堆叠ExpandableListView

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

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

2 个答案:

答案 0 :(得分:1)

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

尝试listview.addFooterView(view);

答案 1 :(得分: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;
}

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

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