2012-02-10 1 views
0

Я знаю, как обрабатывать события, подписываясь (setOnClickChildListener) ExpandableListView (или переопределяя метод обратного вызова ExpandableListActivity: onChildClick). Эти два позволяют мне знать детали groupPosition, childPosition и представление макета строки (мой пользовательский макет для дочерних элементов). Но я хочу знать, какой конкретный вид был нажат (например, какое текстовое представление моей пользовательской строки).Как обрабатывать события кликов разных представлений в строке дочернего элемента ExpandableListView

Я попытался переопределить метод getView для mSimpleCursorTreeAdapter и подписаться на мои текстовые комментарии к слушателю onClick. Но таким образом я не могу знать groupPosition и 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

 Смежные вопросы

  • Нет связанных вопросов^_^