2016-06-24 12 views
0

カスタムAlertDialogにはラジオボタンがあり、これはテキストビューのクリックで開きます。ラジオボタンが決して "チェックされた"と表示されることを除いて、すべてが正常に動作しています。 AlertDialogを開くたびに、すべてのボタンがチェックされません。ボタンを選択し、再度AlertDialogを開くと、ボタンは再びチェックされなくなります。アラートダイアログのカスタムラジオボタンはチェックされません

マイXML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:padding="15dp"> 

<RadioGroup 
    android:id="@+id/rg_gender" 
    android:layout_width="200dp" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="30dp" 
    android:layout_marginLeft="30dp" 
    android:layout_marginTop="10dp" 
    android:orientation="vertical" 
    android:layout_gravity="center_horizontal"> 

    <RadioButton 
     android:id="@+id/buttonMale" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/therapist_male" 
     /> 

    <RadioButton 
     android:id="@+id/buttonFemale" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/therapist_female" 
     /> 

    <RadioButton 
     android:id="@+id/buttonEither" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/therapist_either" 
     /> 
</RadioGroup> 
</LinearLayout> 

マイAlertDialog:あなたは開口部に、ダイアログの状態を復元し、AlertDialog毎回の新しいインスタンスを割り当てていない

private void therapistDialog() { 

    final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View dialogView = inflater.inflate(R.layout.gender_dialog, null); 
    dialogBuilder.setView(dialogView); 
    dialogBuilder.setNegativeButton(getResources().getString(R.string.cancel_button), new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 
    final AlertDialog alertDialog = dialogBuilder.show(); 

    final RadioGroup rg = (RadioGroup) dialogView.findViewById(R.id.rg_gender); 
    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      if (checkedId == R.id.buttonMale){ 
       tvGender.setText(getResources().getString(R.string.therapist_male)); 
       therapistSex = 0; 
       mMassage.setTherapistSex(therapistSex); 
       male.setChecked(true); 
       alertDialog.dismiss(); 
      } else if (checkedId == R.id.buttonFemale){ 
       tvGender.setText(getResources().getString(R.string.therapist_female)); 
       therapistSex = 1; 
       mMassage.setTherapistSex(therapistSex); 
       alertDialog.dismiss(); 
      } else if (checkedId == R.id.buttonEither){ 
       tvGender.setText(getResources().getString(R.string.therapist_either)); 
       therapistSex = 2; 
       mMassage.setTherapistSex(therapistSex); 
       alertDialog.dismiss(); 
      } 
     } 
    }); 
+4

まず、スイッチを使用することを検討して代わりに他の建設場合は、あなたのチェックボックスの状態を維持します。あなたがチェックした状態を保存していないと思います。いくつかのデータに状態をバインドし、このデータを使用してダイアログを初期化すると、ダイアログが構築されます。 –

答えて

0

あなたはtherapistDialogメソッドを呼び出します。
ビューinitのボタンをチェックしてみてください。
は、あなたがメソッドtherapistDialog()を呼び出すたびにalertDialogBu​​ilderの新しいインスタンスを作成しているdialogBuilder.setView(dialogView);

+0

ありがとう!これは動作します!私には1つの質問しかありません。 buttonIdは使用されませんか? – jlively

+0

あなたが求めていることはわかりません。以前にボタンIDを使用して、どのチェックボックスがオンになっているかを知っています。ここでは、メソッド 'setTherapistSex'で子オーダー番号だけを保存したので、ボタンを確認するために、ボタンIDではなく、まず注文番号で 'RadioGroup'子を取得する必要があります。 –

+0

心配しないで、私はそれを理解しました。もう一度ありがとう! – jlively

0

を呼び出す前

int buttonToCheck = mMassage.getTherapistSex(); 
RadioGroup radioGroup = dialogView.findViewById(R.id.rg_gender); 
int buttonId = radioGroup.getChildAt(buttonToCheck).getId(); 
radioGroup.check(radioGroup.getChildAt(buttonToCheck).getId()); 

を追加します。あなたは、一度だけ、グローバル

をalertDialogBu​​ilderのインスタンスを作成し、ちょうどあなたのメソッド内

final AlertDialog alertDialog = dialogBuilder.show();を呼び出す必要があります。

注:これはテストされていませんが、これは動作するはずですし、また、すべての