【问题标题】:fragments back navigation片段返回导航
【发布时间】:2019-03-22 06:26:40
【问题描述】:

我解释下面的场景:

Activity1(fragment1) -> Activity1(fragment2) -> Activity1(fragment3) -> Activity2(fragment4)(OK-button)

如果我在 Activity 2 中点击 fragment4 上的 OK 按钮,我应该登陆 Activity1(fragment2) 并且在点击 Fragment 2 上的后退按钮时,它应该登陆 Fragment1。

我尝试了以下代码:

activity?.supportFragmentManager?.popBackStack() 

但它不起作用。有关如何解决此问题的任何帮助或建议。你可能会问为什么我在这里使用很多片段,但我真的没有其他选择。

【问题讨论】:

  • 请发布您的代码。
  • @Vall0n 感谢您的回复。但根据链接,所有片段都在一个活动中。但就我而言,fragment1,2,3 在一个活动中,而 fragment4 在不同的活动中。
  • 你试过activity?.supportFragmentManager?popBackStackImmediate()吗?
  • popBackStack() 在多个活动中不起作用!

标签: android android-fragments android-activity back-stack android-navigation


【解决方案1】:

当您点击Activity2(fragment4) 中的OK 按钮时,只需在sharedPreference 中输入一个条目,然后再调用Activity1 意图,如下所示:

SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(key, "1");
editor.commit();

然后拨打您的Activity1:

Intent Activity1 = new Intent(getActivity(), Activity1.class);
startActivity(Activity1);

现在在您的Activity1 中,在设置内容视图之前,只需检查共享首选项是否有变量key,其中存储了值1。如果它包含值1,则在框架布局frm 中加载fragment2。像这样:

sharedPreferences = getActivity().getSharedPreferences(mypreference, Context.MODE_PRIVATE);
if (sharedPreferences.contains(city)) {
       FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
       fragmentTransaction.replace(R.id.frm,new fragment2()).addToBackStack(null).commit();
}

正常调用此活动时,共享首选项不会在key 中具有值1,因此fragment1 将作为您的正常流程加载。

现在,当您从此处移至下一个片段时,只需将 0 存储在共享首选项中的 key 变量中。这可以在fragment2onDetach() 方法中完成

同样回到fragment1,可以关注this的回答,获取更详细的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多