【问题标题】:Android re-showing dialogfragment from separate fragmentAndroid从单独的片段重新显示对话框片段
【发布时间】:2014-07-31 19:54:00
【问题描述】:

我有一个使用片段的应用程序。设置是这样的:
主活动加载,将片段活动加载到父活动的右侧部分 -从片段中,我启动了一个显示用户列表的 DialogFragment - 从 DialogFragment 中,如果您单击列表中的一个用户,它会隐藏用户列表 DialogFragment .hide() 并显示一个包含有关用户详细信息的新 DialogFragment

这一切都很好。但是,当我单击 Details DialogFragment 上的 Close 按钮​​时,我想关闭该对话框,并重新显示 List of Users 对话框。

我意识到这有点难以理解。 有没有人有任何可以帮助我的见解?

更新

我用来显示 DialogFragment 的代码如下:

MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getFragmentManager(), "MyDialogFragment");

然后在对话框片段中,如果我想隐藏它并显示我调用的详细信息片段

dialog.hide();
MyDetailsFragment details = new MyDetailsFragment();
details.show(getFragmentManager(), "MyDetailsFragment");

基本上,当我关闭详细信息时,我需要能够重新显示上面的对话框。

【问题讨论】:

  • 一个完全不涉及DialogFragments 的解决方案是使用Dialog-themed 活动(后台将确保用户列表活动对话框将重新显示时用户详细信息活动对话框完成)。您也可以使用FragmentTransaction#addToBackStack 方法实现类似的效果。
  • 您能否展示一个用于调出 DialogFragments 并将其切换出来的代码示例?
  • @AndrewSchuster 问题已更新为包含我用来显示/隐藏对话框片段的代码
  • 您是否尝试过不在您的MyDialogFragment 上调用hide()
  • @AndrewSchuster 是的,这似乎确实有效,但您可以看到 MyDialogFragment 上方的对话框弹出。然后,当您关闭详细信息对话框时,下面的对话框已经存在并存在。希望能够通过隐藏一个,显示另一个来使其更流畅,当细节被忽略时,重新显示隐藏。

标签: android android-fragments android-dialog android-dialogfragment


【解决方案1】:

执行片段事务时,您可以将其添加到后台堆栈中,这可以在关闭对话框时反转。

开始一个片段事务并使用DialogFragment.show(FragmentTransaction transaction, String tag) 变体,它将FragmentTransaction 作为参数。它将负责显示对话框,将片段添加到传递的事务中,然后提交事务。稍后当对话框关闭时,DialogFragment 将自行处理弹出事务。

您可以关注DialogFragment docs 中发布的第一个示例。

这是工作代码:

   public void launchMyDialog(View v) {
        // DialogFragment.show() will take care of adding the fragment
        // in a transaction.  We also want to remove any currently showing
        // dialog, so make our own transaction and take care of that here.
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        Fragment prev = getFragmentManager().findFragmentByTag("mydialog");
        if (prev != null) {
            ft.remove(prev);
        }
        ft.addToBackStack(null);

        MyDialogFragment dialog = new MyDialogFragment();
        dialog.show(ft, "mydialog");
    }

    public static class MyDialogFragment extends DialogFragment {

        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_main, container, false);
            Button b = (Button) v.findViewById(R.id.button);
            b.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    FragmentTransaction ft = getFragmentManager().beginTransaction();
                    Fragment prev = getFragmentManager().findFragmentByTag("mydialog");
                    if (prev != null) {
                        ft.remove(prev);
                    }
                    ft.addToBackStack(null);

                    MyDetailsFragment dialog = new MyDetailsFragment();
                    dialog.show(ft, "mydialog");

                }

            });
            return v;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多