8

複数のダイアログを重ねて表示することは可能ですか?Dialog Z-Levelのようなものはありますか?ユーザーが要素を選択するDialogFragmentを使用しています。ユーザーが選択を確認すると、データベースに保存され、サーバーに送信されます。保存アクションが失敗した場合、ユーザーに通知したいのですが...別のダイアログは可能ですか?そして、それは私の最初のダイアログをクリアしませんか?前もって感謝します。

4

3 に答える 3

5

実際、複数のダイアログフラグメントを別のフラグメントの中に表示することは可能です。Zオーダーは、作成される順序によって異なります。

以下のコードには、必要な動作を備えたFragmentActivityの例があります。

public class MyActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        //...    
    }

    public void onSave(View view) {
        Intent intent = getIntent();

        this.setResult(RESULT_OK, intent);
        finish();
    }

    public void onCancel(View view) {
        finish();
    }

    public void SelectWeekDay(View view) {
        DialogFragment selectWeekDayFragment = new SelectWeekDayFragment();
        selectWeekDayFragment.show(getSupportFragmentManager(), "WeekDayDialog");
    }

    public class SelectWeekDayFragment extends DialogFragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.week_day_dialog, container, true);

            Button saveButton = (Button) view.findViewById(R.id.button_save);
            saveButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    CheckBox checkboxMonday = (CheckBox) getDialog().findViewById(R.id.checkBox_monday);
                    if (!checkboxMonday.isChecked()) {
                        DialogFragment saveErrorFragment = new SaveErrorFragment();
                        saveErrorFragment.show(getSupportFragmentManager(), "SaveErrorFragment");
                    }
                    else {
                        SaveToDb(); //Perform actions to store on db or what you wish
                        dismiss();  
                    }
                }
            });

            Button cancelButton = (Button) view.findViewById(R.id.button_cancel);
            cancelButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    dismiss();
                }
            });

            return view;    
        }
    }

    public class SaveErrorFragment extends DialogFragment {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            return new AlertDialog.Builder(getActivity())
            .setMessage("You must select Monday").setPositiveButton("Ok", null).create();
        }
    }
}
于 2013-04-05T22:07:52.467 に答える
0

私のアドバイスは、ダイアログ内にViewFlipperを備えたカスタムレイアウトを使用して、プログレスバーや表示したいさまざまなレイアウトを簡単に切り替えることができるようにすることです。複数のダイアログを表示したい場合、zオーダーは、一番上に表示されている最新のビーイングが作成された順序に依存すると思います。

于 2012-04-23T15:06:58.517 に答える
0

ただし、通常は少し注意する必要があります。副作用を回避するために、ダイアログのライフサイクルを活用してください。例:onStop()などの関数をチェックして、子ダイアログが開いているかどうかを確認し、開いている場合は閉じます。

理想的には、それが正気である限り、ダイアログのレイヤーの量を減らすことが理想的です(たとえば、それを行うと、数百行のコードが増えることになります)

于 2013-07-01T13:16:01.690 に答える