Android重新显示来自单独 fragment 的dialogfragment

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

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

这一切都很好。但是,当我单击 Details DialogFragment 上的关闭按钮时,我想关闭该对话框,并重新显示用户列表对话框。

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

更新

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

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

然后一旦在对话 fragment 中,如果我想隐藏它并显示我调用的细节 fragment

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

基本上,当我忽略细节时,我需要能够重新显示上面的对话框。

最佳答案

执行 fragment 事务时,您可以将其添加到返回堆栈,这可以在关闭对话框时撤消。

开始 fragment 事务并使用 DialogFragment.show(FragmentTransaction transaction, String tag)FragmentTransaction 作为参数的变体。它将负责显示对话框,将 fragment 添加到传递的事务中,然后提交事务。稍后当对话框被关闭时,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;
        }
    }

关于Android重新显示来自单独 fragment 的dialogfragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067797/

相关文章:

java - fragment 错误中的 Android getListView()

android - 通过样式更改 Android 对话框按钮文本大小

android - 如何在android中显示全屏 fragment Activity ?

android - recyclerview 的所有版本在哪里?

Resume 后 Android Runnable 运行速度更快

Android layout_weight 组件

android - fragment 在 replace() 上有默认的白色背景而不是透明背景

android - Fragment 中的 ListView 未显示

Android 谷歌地图无法在 fragment 中工作

android - Android中DialogFragment和FragmentActivity之间的通信