【问题标题】:Going back in Fragments by pressing the back button按后退按钮返回片段
【发布时间】:2013-11-19 00:56:52
【问题描述】:

我想通过按返回按钮返回到另一个片段。我已经读过,addToBackStack (String tag) 应该有所帮助,但它并没有真正起作用。

这是我在切换片段时所做的。

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.content_frame, new MainFragment());
ft.addToBackStack("Mainfragment");
ft.commit();

现在,Fragment 打开,并开始一个AsyncTask,其中出现了一个加载圆圈。加载后显示数据。当我现在按一次后退按钮时,片段会回到创建加载圈的AsyncTask 的开头。但是AsyncTask 不会继续。当我再次按下返回按钮时,应用程序将关闭。

我尝试添加onBackPressed,但它只是告诉我,这在片段中不起作用。去这里的最佳方式是什么?

编辑澄清: 没有错误。它只是不工作。就像我什至没有 addToBackStack 这一行 –

【问题讨论】:

  • 没有错误。它只是不工作。这就像我什至没有addToBackStack

标签: android android-fragments android-asynctask


【解决方案1】:

我之前也遇到过同样的情况,我最终得到了这个解决方案。添加或替换 Fragments 时,需要以唯一的名称将其添加到 backStack。然后,当按下后退按钮时,您可以使用以下方法在您创建 Fragment 的 FragmentActivity 中查看哪个 Fragment 是活动的。

private String getCurrentFragmentName() {

    int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();

    String fragmentName;

    if (backStackEntryCount > 0) {
        fragmentName = getSupportFragmentManager().getBackStackEntryAt(backStackEntryCount - 1).getName();
    } else {
        fragmentName = "";
    }

    return fragmentName;
}

并在 onKeyDown() 方法中执行以下操作。

    if (keyCode == KeyEvent.KEYCODE_BACK && getCurrentFragmentName().equals("your fragment name")) {
        // Handle back press for this case.
        return true;

    } else if (keyCode == KeyEvent.KEYCODE_BACK
            && getCurrentFragmentName().equals("your another fragment")) {

        // Handle back press for another Fragment
        return true;

    } else {
        return super.onKeyDown(keyCode, event);
    }

这就是我用 backStack 添加 Fragment 的地方

transaction.addToBackStack("Your Fragment Name");

【讨论】:

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