2011-03-10 24 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