1

ユーザーが出力ダイアログで [OK] を選択した場合に、クラスの設定を変更したいと考えています。そのために、クラスにこのメソッドを実装しました。

if (basalcor != basal) {

                    FragmentManager fragmentManager = getFragmentManager();
                    ChangeBasalDialog dialogo = new ChangeBasalDialog(basal);
                    dialogo.show(fragmentManager, "tagbasal");
                    if (dialogo.check == true) {
                        String ok= "Basal factor changed succesfully";
                        SharedPreferences.Editor prefsEditor = myprefs.edit();
                        if (basalMorFrame == true) {
                            prefsEditor.putString("basalMor", String.valueOf(basal));
                            prefsEditor.commit();
                            Toast toast=Toast.makeText(Mymeasures.this, ok, Toast.LENGTH_SHORT);
                            toast.show();
                        }   
                        if (basalNiFrame == true) {
                            prefsEditor.putString("basalNi",
                                    String.valueOf(basal));
                            prefsEditor.commit();
                            Toast toast=Toast.makeText(Mymeasures.this, ok, Toast.LENGTH_SHORT);
                            toast.show();
                        }
                    }
                    }

これが ChangeBasalDialog クラスです。

    public class ChangeBasalDialog extends DialogFragment{
     double basal=0;
     boolean check=false;
     @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {

            AlertDialog.Builder builder =
                    new AlertDialog.Builder(getActivity());

            builder.setMessage("The system recommends you now a new Basal factor ("+String.valueOf(basal)+"). Do you want to set the new one as default?")
            .setTitle("New Basal recommendation avaliable")
            .setPositiveButton("Yes, i want", new DialogInterface.OnClickListener()  {
                   public void onClick(DialogInterface dialog, int id) {
                            check=true;
                            dialog.cancel();
                       }
                   })
            .setNegativeButton("No, I'll keep my old value", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                       }
                   });

            return builder.create();
        }



     public ChangeBasalDialog (double a){
     basal=a;
     }
}

問題は、[OK] を押しても dialogo.check が常に false であり、設定を変更できないことです。OKボタンを押したときにdialogo.check = trueを返すようにしたいだけですが、すべてを試してみましたが、表示されません。前もって感謝します

4

1 に答える 1

1

これを行うと、 dialog.cancel();すべての変数がリセットされます。

ChangeBasalDialog の外側でブール値チェックを使用することをお勧めします (この ChangeBasalDialog が別のアクティビティ内にある場合)。

または、DialogFragment のリスナーを実装します。これは十分に文書化された例です。

于 2013-09-03T16:58:04.243 に答える