2011-03-10 31 views
2

我正在实施ExpandableListAdapter。BaseExpandableListAdapter - 为没有子项的组项目禁用onclick

使用案例:

我有我想要添加到无子女的扩展列表组项目。问题在于每个小组项目都可以被点击,即使他们不包含任何小孩。

是否有办法禁用/灰显可展开按钮,以指示用户它不包含子项?

目前,我已经实现了:

public void onGroupExpanded(int groupPosition) { 
    if (!containsChildren(groupPosition)) { 
     Toast.makeText(context, context.getString(R.string.err_no_children), Toast.LENGTH_LONG).show(); 
    } 
} 

我宁愿有一个视觉如上所述(禁用/灰了可扩展按钮),有这个面包显示,如果他们点击它。因为你可以点击groupItem的时候,它会试图扩大零项,这看起来很愚蠢?或者这是默认好的MMI [1]行为?

[1] http://en.wikipedia.org/wiki/Man-machine_interface

回答

0

我都使出关闭使用该组指标(在ExpandableListActivity,手工做你的清单上,如果你有定期的活动):

getExpandableListView().setGroupIndicator(null); 

然后在你正在执行的getGroupView()方法检查你要查看的组是否有任何孩子(我正在使用我的列表清单,因此它非常直截了当),并相应地设置组的视图(使你自己扩展器按钮也许)。您可能需要随父母和convertView设置一起玩,看看最适合您的是什么。

public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 

     convertView = inflater.inflate(
       android.R.layout.simple_expandable_list_item_1, parent, 
       false); 

     if (groups.get(groupPosition).getMuscles().size() == 0) { 
      convertView.setEnabled(false); //Greys out group name 
     } 
0

还有其他的方式通过设置onGroupClickListener并为不要有孩子的组返回true做到这一点。

myExpandableList.setOnGroupClickListener(new OnGroupClickListener(){ 

      public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id){ 
       // TODO Auto-generated method stub. 
       if(!myAdapter.containsChildren(groupPosition)){ 
        return true; 
       }else{ 
        return false;     
       } 
      }}); 
+0

该指标呢?你如何让它只显示给有孩子的团体,并在你点击这些团体时改变它? – 2013-12-09 13:37:18

+0

尝试使用'getChildrenCount(int groupPosition)'方法。如果它返回0 - 隐藏指示器。 – Ainius 2013-12-09 15:40:49

+0

不,我认为它已经可以通过普通的getGroupView,因为它有一个布尔值来表明它是否被扩展。无论如何,感谢您的帮助。 – 2013-12-09 17:24:48