我有一个使用 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/