2012-02-10 19 views
0

我知道如何通过订阅(setOnClickChildListener)ExpandableListView(或覆盖ExpandableListActivity回调方法:onChildClick)来处理事件。这两个让我知道细节groupPosition,childPosition和行布局的视图(我为孩子们的自定义布局)。 但我想知道什么特定的视图被点击(例如我的自定义行的哪个textview)。如何处理ExpandableListView子行内不同视图的事件点击

我试着重写mSimpleCursorTreeAdapter的getView方法,并将我的textviews订阅到onClick监听器。但是这样我就无法知道groupPosition和child row的childPosition点击了。如果我以这种方式处理视图的onClick,则该事件将消耗,并且onClickChildListener和onChildClick的回调方法永远不会被分派。

我想我说的是错的。我希望有人告诉我一个办法。

谢谢。

回答

2

我已经找到了解决办法:

@Override 
    public View getChildView(int groupPosition, int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 
     View row = convertView; 
     if (row == null) { 
      LayoutInflater inflater = getLayoutInflater(); 
      row = inflater.inflate(R.layout.row_child, 
        parent, false); 
     } 

     TextView textOne = (TextView) row 
       .findViewById(R.id.text_row_child1); 
     TextView textTwo = (TextView) row 
       .findViewById(R.id.text_row_child2); 

     HandleOnClick handleOnClick = new HandleOnClick (
       groupPosition, childPosition, getChildId(groupPosition, 
         childPosition)); 
     textOne.setOnClickListener(handleOnClick); 
     textTwo.setOnClickListener(handleOnClick); 

     return super.getChildView(groupPosition, childPosition, 
       isLastChild, row, parent); 
    } 

    private class HandleOnClick implements OnClickListener { 
     private int groupPosition; 
     private int childPosition; 
     private Long id; 

     public HandleOnClick (int groupPostion, int childPosition, 
       Long id) { 
      this.groupPosition = groupPostion; 
      this.childPosition = childPosition; 
      this.id = id; 
     } 

     public void onClick(View v) { 

      idChild = id; 
      switch (v.getId()) { 

      case R.id.text_row_child1: 


       break; 


      case R.id.text_row_child2: 

       //........ 

感谢

+0

我一直在寻找了一段时间的解决方案。我喜欢你的方法,我可能会使用它,尽管在适配器中定义点击监听器感觉有点奇怪。从活动本身定义适配器会更好(可能是在扩展组的情况下)。感谢您的解决方案。 – manuel 2012-08-14 17:13:17

相关问题