【问题标题】:Android fragment navigation, circular pathAndroid片段导航,圆形路径
【发布时间】:2014-04-24 17:04:20
【问题描述】:

好的,这是我的问题,我有三个片段,我们称它们为 [1]、[2] 和 [3]。

这是我希望他们遵循的路径:

[1] > [2] > [3] >(后退键)> [1]

由于某种原因,这只有效一次,当我尝试进行第 2 轮时,会发生以下情况:

[1] > [2] > [3] >(back-key)> [1] > [2] > [3] >(back-key)> [3] >(back-key)> 退出

也就是说,当我第二次到达 [3] 并按下后退按钮时,没有任何反应,如果我再次按下我的应用程序将退出到 android。 (从不返回 [1])

我很确定这与 addToBackSack 方法有关,但我不能完全确定它。

这是我的代码

[A]

    public void onClick(View v) {

        Fragment fragment = new [B]Fragment();
        FragmentManager fm = this.getActivity().getFragmentManager();

        FragmentTransaction transaction = fm.beginTransaction();


        transaction.replace(R.id.container, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
        break;

    }

[B]

    public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {

    Fragment fragment = new [C]Fragment();
    FragmentManager fm = this.getActivity().getFragmentManager();

    FragmentTransaction transaction = fm.beginTransaction();

    transaction.replace(R.id.container, fragment);

    transaction.commit();

}

我没有在 [B] 上使用 addToBackStack,因为我不想让 android 记住这个交易,对吗?

谢谢!

【问题讨论】:

  • 一般来说,使用Fragments 构建导航层次结构可能非常棘手,并且您经常会遇到您所描述的问题。考虑仅使用Activities 在您的应用中创建导航层次结构,并使用Fragments 显示这些Activities 中的内容。
  • @XaverKapeller 在 OP 的问题中将“fragment”替换为“activity”,然后告诉我您的“建议”如何解决他的问题。
  • 问题是,新的 ADT 插件有点鼓励您尽可能使用片段(去尝试一下,默认情况下它会创建一个内部带有片段的活动)。我正在使用活动来分隔我的应用程序的不同部分主要 |设置。但在这些部分中,我使用片段。一定有办法让导航正确!

标签: android android-fragments navigation


【解决方案1】:

好的!找到答案了!

public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    Toast.makeText(this.getActivity(), "New order created",
            Toast.LENGTH_SHORT).show();
    Fragment fragment = new OrderFragment();
    FragmentManager fm = this.getActivity().getFragmentManager();
    fm.popBackStack();
    FragmentTransaction transaction = fm.beginTransaction();
    transaction.addToBackStack(null);
    transaction.replace(R.id.container, fragment);
    transaction.commit();

}

函数 popBackStack() 成功了! :) 我不确定这是如何工作的。但确实如此!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多