Android:我可以一个显示多个对话框吗?有没有类似 Dialog Z-Level 的东西?

Posted

技术标签:

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

是否可以一个接一个地显示多个对话框?有没有类似 Dialog Z-Level 的东西? 我正在使用用户选择元素的 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() 之类的函数,以查看子对话框是否打开,如果是,则关闭它。

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

【讨论】:

以上是关于Android:我可以一个显示多个对话框吗?有没有类似 Dialog Z-Level 的东西?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 aws 设备场中为 Android espresso 测试禁用一个对话框吗

android python脚本:GUI?

Android - Intent.Action_Send 发送多个图像而不多次显示选择器对话框

在 Android 中显示对话框时显示 AppBar

为啥我的 Android ListView 选择多个项目?

对话框不显示正面和负面按钮