【问题标题】:Android: Can i show multiple Dialogs one over another? Is there something like Dialog Z-Level?Android:我可以一个显示多个对话框吗?有没有类似 Dialog Z-Level 的东西?
【发布时间】:2012-05-04 04:55:36
【问题描述】:

是否可以一个接一个地显示多个对话框?有没有类似 Dialog Z-Level 的东西? 我正在使用用户选择元素的 DialogFragment,当他确认他的选择时,它会保存到数据库并发送到服务器上。如果保存操作失败,我想通过...通知用户另一个对话框是否可能?它不会清除我的第一个对话吗? 提前致谢。

【问题讨论】:

    标签: android android-dialog android-dialogfragment


    【解决方案1】:

    确实,可以在一个内部显示多个对话框片段。 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();
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我的建议是在对话框中使用带有 ViewFlipper 的自定义布局,这样您就可以轻松地在进度条或您想要显示的任何不同布局之间切换。如果您想显示多个对话框,我的猜测是 z 顺序取决于它们的创建顺序,最新的蜜蜂显示在顶部。

      【讨论】:

        【解决方案3】:

        不过,您通常可以稍加小心。使用对话框的生命周期来避免副作用。例如:您可以检查 onStop() 之类的函数,以查看子对话框是否打开,如果是,则关闭它。

        理想情况下,减少对话层的数量是理想的,只要它是理智的(例如:这样做最终会增加数百行代码)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-03
          • 2021-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-11
          相关资源
          最近更新 更多