2012-02-10 49 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

相關問題