2012-02-09 95 views
2

我想爲我的片段使用ExpandableListView,但由於它不是原生的,所以我使用此線程:https://stackoverflow.com/a/6193434/969881包含一個擴展Fragment的ExpandableListFragment類。使用來自arne.jans的ExpandableListFragment永遠不會觸發onListItemClickListener事件

這種運作良好,我宣佈我的片段是這樣的:

public class MyExpListFragment extends ExpandableListFragment { 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    // Set up our adapter 
    mAdapter = new SimpleExpandableListAdapter(
     getActivity().getApplicationContext(), 
     groupData, 
     android.R.layout.simple_expandable_list_item_1, 
     new String[] { NAME, IS_EVEN }, 
     new int[] { android.R.id.text1, android.R.id.text2 }, 
     childData, 
     android.R.layout.simple_expandable_list_item_2, 
     new String[] { NAME, IS_EVEN }, 
     new int[] { android.R.id.text1, android.R.id.text2 } 
    ); 

    setListAdapter(mAdapter); 
} 

... 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    Log.i("TAG", "Item selected"); 
} 



} 

但不幸的是onListItemClick永遠不會觸發。你有任何線索嗎?

我也有這些問題:

  • 的onGroupCollapsed,onGroupExpand和onChildClick不Overrided方法(例如:該方法onChildClick(ExpandableListView,查看,INT,INT,長)型ExpandableListFragment必須重寫一個超類方法)我想知道爲什麼,因爲我的類擴展ExpandableListView.OnChildClickListener。

  • onGroupCollapsed,onGroupExpand和onChildClick從來沒有被觸發,可能是因爲它們不被視爲覆蓋超類方法的方法。

在此先感謝您的幫助!

回答

1

找到了答案。

我使用ExpandableListView作爲我的片段,像這樣的一個祕密參數:

private ExpandableListView elv; 

然後,創建我的片段後,我在我的ELV鏈接到我的expandableListFragment創建當前ExpandableListView:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    elv = getExpandableListView(); 
} 

然後我就可以觸發我ExpandableListView的任何事件就像這樣:

elv.setOnGroupClickListener(new OnGroupClickListener() {  
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
     Log.d("TAG", "Group number " + groupPosition + " is clicked "); 
     return false; 
    } 
}); 
0

在我ExpandableListFragment的超我添加這些方法

@Override 
    public void onActivityCreated (Bundle savedInstanceState) { 
     Log.d("LocalListFragment", "onActivityCreated"); 
     super.onContentChanged(); 
     super.onActivityCreated(savedInstanceState); 
    } 
    @Override 
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 

     Map<String, String> childmap = (Map<String, String>) mAdapter.getChild(groupPosition, childPosition); 
     String c = (String)childmap.get(CHILD); 

     Map<String, String> groupmap = (Map<String, String>) mAdapter.getGroup(groupPosition); 
     String g = (String)groupmap.get(GROUP); 
     Log.d("LocalListFragment", "onChildClick c="+c+" g="+g); 

     return false; 
    } 

它似乎運作良好

僅供參考,

private static final String GROUP = "GROUP"; 
    private static final String CHILD = "CHILD"; 

創造這樣curGroupMap.put(GROUP地圖時使用, 「GROUP」+ i);