2012-01-27 4 views
0

У меня есть xml-файл с именем options.xml Я использую его для создания своего AlertDialog. Я также добавил кнопку «Готово» для AlertDialog. Когда нажата кнопка «Готово», вызывается метод onClick ниже. Однако, независимо от того, какой RadioButton я проверил, прежде чем нажимать «Готово», я всегда получаю первый RadioButton как проверенный, а остальные - как неконтролируемые. Я предполагаю, что то, что я делаю ниже, просто читает значения xml, а не фактические значения времени выполнения? Тогда как я могу прочитать реальные значения времени выполнения?Как читать состояние RadioButton

public void onClick(DialogInterface arg0, int arg1) { 
      LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ; 
      View layout = inflater.inflate(R.layout.options, null); 
      RadioButton a1 = (RadioButton)layout.findViewById(R.id.radio0); 
      RadioButton a2= (RadioButton)layout.findViewById(R.id.radio1); 
      RadioButton a3 = (RadioButton)layout.findViewById(R.id.radio2); 
      RadioButton a4 = (RadioButton)layout.findViewById(R.id.radio3); 
      boolean b1 = a1.isChecked(); 
      boolean b2 = a2.isChecked(); 
      boolean b3 = a3.isChecked(); 
      boolean b4 = a4.isChecked(); 

    } 

EDIT: Решение, которое я использовал «Спасибо, я не проверял второй вариант, но я обнаружил, что AlertDialog имеет findViewById, и это был просто вопрос вызова, что после создания диалога (Не требуется, чтобы быть. сделать внутри onCreate или любую другую специальную функцию). Вам просто нужно запомнить вызов findViewById после вызова show() для диалога, иначе он не работал »

ответ

0

Вы правы, вы читаете xml значения из них, потому что вы пытаетесь findViewById на макет, накачанный непосредственно из xml.

Вы можете использовать mContext.findViewById (..), если mContext - это Activity. В противном случае определите свои RadioButtons где-то в onCreateDialog (..), а не внутри onClick (..), а затем используйте их для определения isChecked().

Это аналогичный пример, когда мне нужно было получить значение EditText из метода onClick (..). Если вам нужен модификатор final, Eclipse должен сказать вам. Это все в методе onCreateDialog (..).

case FIRST_TRANSLATE: 
     View view = mHost.getLayoutInflater().inflate(R.layout.first_translate, null); 
     //Define your radiobuttons here 
     final EditText mLanguage = (EditText) view.findViewById(R.id.editText1); 
     b.setView(view) 
     .setTitle(R.string.dialog_first_translate_title) 
     .setPositiveButton(sOkay, new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int arg1) { 
       //Retrieve their values here 
       mHost.getSharedPreferences(States.INTERNAL_PREFS, 0).edit().putString("deflang", mLanguage.getText().toString()).commit(); 
       dialog.dismiss(); 
      } 

     }).create(); 
+1

Спасибо, я не проверял второй вариант, но обнаружил, что AlertDialog имеет findViewById, и это просто вопрос вызова после создания диалога. (Не нужно делать внутри onCreate или любой другой специальной функции). Вам просто нужно запомнить вызов findViewById после вызова show() для диалога, иначе он не будет работать. – user1097185