2013-04-23 3 views
0

Из моего MainView (ExpandableListView) я получаю в RadioButton определяется child_row.xml, я поставил слушателя, но OnCheckChanged не делает дозвонились. Если я переведу RadioButton в currentview, он будет вызван.RadioButton OnCheckChanged не называется

Как это исправить?

У меня есть ....

  1. mainListView.xml // expandableListView
  2. group_row.xml // TextView
  3. child_row.xml // имеет пользовательские RadioButton

public class Main_ListView extends Activity implements OnCheckedChangeListener{ 
public void onCreate(Bundle savedInstanceState) { 
try{ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mainListView); 

     ExpandableListView elv = (ExpandableListView) findViewById(R.id.expandableListView1); 
     SimpleExpandableListAdapter expListAdapter = 
       new SimpleExpandableListAdapter(
         getApplicationContext(), 
         createGroupList(),    // Creating group List. 
         R.layout.group_row,    // Group item layout XML. 
         new String[] { "Group Item" }, // the key of group item. 
         new int[] { R.id.row_name }, // ID of each group item.-Data under the key goes into this TextView. 
         createChildList(),    // childData describes second-level entries. 
         R.layout.child_row,    // Layout for sub-level entries(second level). 
         new String[] {"Sub Item"},  // Keys in childData maps to display. 
         new int[] { R.id.grp_child}  // Data under the keys above go into these TextViews. 
        ); 
       elv.setAdapter(expListAdapter);  // setting the adapter in the list. 

     }catch(Exception e){ 
       System.out.println("Errrr +++ " + e.getMessage()); 
     } 


    final LayoutInflater factory = getLayoutInflater(); 
    final View childview = factory.inflate(R.layout.child_row, null); 

    answersGroup = (SegmentedRadioGroup) childview.findViewById(R.id.answersGroup); 
    if(answersGroup != null) 
     answersGroup.setOnCheckedChangeListener(this); 

} 
@Override 
public void onCheckedChanged(RadioGroup group, int checkedId) { 
    if (group == answersGroup) { 
     if (checkedId == R.id.radio0) { 
      mToast.setText("One"); 
      mToast.show(); 
     } else if (checkedId == R.id.radio1) { 
      mToast.setText("Two"); 
      mToast.show(); 
     } else if (checkedId == R.id.radio2) { 
      mToast.setText("Three"); 
      mToast.show(); 
     } 
    } 

} 
+0

Он должен быть вызван, возможно, изменит условие «if (group == answersGroup)» как тестирование, если 2 объекта идентичны в java, выполняется с помощью метода equals – Benoit

+0

Что-то не хватает, когда я получаю идентификатор из другого макета - это заставляет его не вызывать метод. Как я уже сказал, он называет это, если я переведу радио на макет currentView. Ваша проверка находится внутри метода, но метод не вызван. – user1529412

ответ

0

Вам не предоставили полный код, который вы использовали. Если позже вы добавите этот раздутый childView в макет Activity, тогда вы должны предоставить основной макет, чтобы узнать, не блокируете ли вы CheckBox. Если вы просто раздуваете макет, то это нормально, вы не получаете отмеченное событие как это childView нет на экране, на который нужно действовать.

С точки зрения вашего кода кажется, что вы хотите установить прослушиватель для CheckBox у ребенка ExpandableListView. Если это то, что вы хотите, это неправильная попытка, и способ сделать это - использовать пользовательский адаптер для вашего ExpandableListView. Существует множество учебников (и вопросов здесь) с построением пользовательского адаптера и установкой прослушивателей на дочерние элементы.

+0

Да, я хочу, чтобы у слушателя был флажок у ребенка. Правильный ли способ адаптивного адаптера? Где находится фактический код приемника флажка, в адаптере? – user1529412

+0

@ user1529412 Да, пользовательский адаптер - это правильный способ установки слушателя. В этом 'getChildView()' метод раздувает ваш макет, а затем устанавливает слушателя CheckBox. – Luksprog

+0

Спасибо - Работали как шарм. – user1529412

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