Gra*_*ith 33 android android-fragments

我知道之前已经问过这个问题,但是到目前为止我已经得到了以前的答案.方案如下:我们有一个仪表板片段(A),它将用户引导到登录屏幕(B).成功登录后,他们会转到列表视图(c).在背压上我想返回A,因为用户不需要再次看到登录屏幕.此外,在成功登录后,我们将详细信息存储在共享首选项中,并在下次自动登录B,这些都按计划运行.
我有以下FragmentHelper方法:
public static void goToNextFragement(Fragment fragment, int container, boolean addToBackStack, Fragment ctx)
{
// Create new fragment and transaction
FragmentTransaction transaction = ctx.getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(container, fragment);
if(addToBackStack)
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
在从B到CI的事务中,将布尔addToBackStack设置为false,以便transaction.addToBackStack(null);不调用它.这再次运作良好,但之后我的问题开始了.
当用户按下C并返回AI时,仍然可以在A的视图下看到C的膨胀视图.
任何帮助,将不胜感激.我希望我的图表有助于保持这一点.
Bha*_*ara 21
我解决了这个问题... ...
getFragmentManager().popBackStack();
Run Code Online (Sandbox Code Playgroud)
要么
getSupportFragmentManager().popBackStack()
Run Code Online (Sandbox Code Playgroud)
这在您添加片段和维护backstack(不替换)时有效.
f1 - > f2
Fragment2 f2 = new Fragment2();
this.getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.main_content,f2).addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)
这里没什么特别的.在片段f2中,此代码将您带到片段f3.
f2 - > f3
Fragment3 f3 = new Fragment3();
getActivity().getSupportFragmentManager().popBackStack();
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.main_content, f3).addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)
我不确定通过阅读文档是否应该工作,这种弹出的事务方法据说是异步的,也许更好的方法是调用popBackStackImmediate().但到目前为止,我可以在我的设备上告诉它它的工作完美无瑕.
所述替代方案将是:
final FragmentActivity activity = getActivity();
activity.getSupportFragmentManager().popBackStackImmediate();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.main_content, f3).addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)
这里实际上会有短暂的回到f1 beofre继续前进到f3,所以那里有一个轻微的故障.
这实际上是你所要做的,这个答案也可以帮助你.
小智 1
有几种方法可以处理这个问题:
我的应用程序中有类似的流程,我解决它的方法是用从主活动触发的 AlertDialog 替换登录片段。因此,在您的情况下,片段 A 显示在屏幕上,如果主活动认为需要显示登录对话框,则会显示 AlertDialog。这对我有用。
当片段A启用时,它可以通过询问FragmentManager来检查片段C是否在附近。如果存在则将其删除。
| 归档时间: |
|
| 查看次数: |
25267 次 |
| 最近记录: |