2012-01-27 7 views
0

xmlファイルoptions.xml 私はAlertDialogの作成にこれを使用しています。また、AlertDialogにDoneボタンを追加しました。 完了ボタンを押すと、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(); 

    } 

編集:私は「感謝を使用した溶液は、私は2番目のオプションをチェックしませんでしたが、私はAlertDialogがfindViewByIdを持っており、それは、ダイアログを作成した後に(する必要はないことを呼び出すだけの問題であることがわかりました。 onCreateや他の特別な関数の中で実行されます)ダイアログボックスでshow()を呼び出した後にfindViewByIdを呼び出すだけで十分ですが、それ以外の場合は動作しません。

答えて

0

あなたは正しく、xmlその値はxmlから直接展開されたレイアウトでViewByIdを検索しようとしているためです。

mContextがアクティビティの場合は、mContext.findViewById(..)を使用できます。これに失敗した場合は、onClick(..)ではなくonCreateDialog(..)のどこかにRadioButtonを定義し、これらを使用してisChecked()を決定します。

これは、onClick(..)メソッドの中からEditTextの値を取得しなければならなかったのと同じ例です。 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

ありがとう、私は2番目のオプションを確認しませんでしたが、AlertDialogがfindViewByIdを持っていることが判明しました。 (onCreateやその他の特別な関数の内部で行う必要はありません)。 ダイアログのshow()を呼び出した後にfindViewByIdを呼び出すだけで十分です。そうでない場合は、動作しません。 – user1097185

関連する問題