导航抽屉,处理返回按钮以返回上一个片段。

11 浏览
0 Comments

导航抽屉,处理返回按钮以返回上一个片段。

我正在使用内置的导航抽屉来运行我的应用程序。我无法完全弄清楚如何处理返回按钮。当按下返回按钮时,我希望它重新加载第一个片段。Fragment1。

因此,当应用程序启动时,您将看到启动的Fragment1。然后,他们可以点击Fragment 2-5来转到其他页面。在所有这些页面中,我希望返回按钮将用户带回Fragment1。用户只能通过返回按钮退出应用程序的地方是Fragment1。

由于所有都由FragmentActivity处理,我尝试在那里处理返回按钮。然而,我一直遇到强制关闭错误:

(01-11 14:09:33.114: E/AndroidRuntime(8292): android.view.InflateException: Binary XML file line #7: Error inflating class fragment)

到目前为止,这就是我所拥有的:

我确保像这样将片段添加到返回堆栈中:

fm.beginTransaction().replace(R.id.main, newFragment).addToBackStack("fragBack").commit();

返回按钮:

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().findFragmentByTag("fragBack") != null) {
    }
    else {
        super.onBackPressed();
        return;
    }
    if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
        Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
        Fragment frag = getSupportFragmentManager().findFragmentByTag("fragBack");
        FragmentTransaction transac = getSupportFragmentManager().beginTransaction().remove(frag);
                transac.commit();
    }
}

有人知道我需要做什么吗?我需要在每个片段中调用onBackPressed(如果可能的话),而不是控制抽屉的FragmentActivity吗?在我以前的应用程序中,不管用户在哪个片段上,按下返回按钮都可以关闭应用程序,但我现在做的这个应用程序,我希望返回按钮返回到Fragment1。

非常感谢您的帮助,谢谢。

onItemClick

@Override
        public void onItemClick(AdapterView adapterView, View view, int i, long l) {
            Fragment newFragment = new MapsPage();
            FragmentManager fm = getSupportFragmentManager();
            switch(i) {
            case 0:
                newFragment = new Fragment2();
                break;
            case 1:
                newFragment = new Fragment3();
                break;
            case 2:
                newFragment = new Fragment4();
                break;
            case 3:
                newFragment = new Fragment5();
                break;
            }
            fm.beginTransaction().add(R.id.main, newFragment).addToBackStack("fragback").commit();
            drawerLayout.closeDrawer(rl);
        }

0