【问题标题】:handle back inside navigation drawer把手回到导航抽屉内
【发布时间】:2014-10-02 23:11:06
【问题描述】:

我有一个基于 Android 文档中的example 的导航抽屉。

当您打开导航抽屉时,它会在抽屉内显示一个MainMenuFragment。当您选择一个菜单项时,它会将抽屉内的片段替换为SubMenuFragment。这对后退按钮很有效。

按下后退按钮总是会关闭抽屉,但我想在显示SubMenuFragment 时使用后退按钮在抽屉中显示MainMenuFragment。您如何处理导航抽屉内的后退按钮来替换抽屉内显示的片段。

替换抽屉内的片段不是这里的问题。我不知道如何阻止后退按钮关闭抽屉并让它显示MainMenuFragment

我的主要活动 XML(缩短):

<android.support.v4.widget.DrawerLayout ....>
    <FrameLayout android:id="@+id/container" .../>
    <FrameLayout android:id="@+id/drawer" android:layout_gravity="start" .../>
</android.support.v4.widget.DrawerLayout>

以及我班级的相关部分:

public class MainActivity extends Activity {
    ...
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getFragmentManager().beginTransaction()
            .replace(R.id.drawer, new MainMenuFragment()).commit();

        // setup DrawerLayout and ActionBarDrawerToggle
        ...
    }

    private void showSubMenu() {
        getFragmentManager().beginTransaction()
            .replace(R.id.drawer, new SubMenuFragment()).commit();
    }
}

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    我之前在不同情况下使用的是向 Fragment BackStack 添加片段。

    所以在更改片段时首先将其添加到返回堆栈。

    getFragmentManager().beginTransaction()
            .replace(R.id.drawer, new MainMenuFragment()).addToBackStack(null).commit();
    

    并且在处理返回时执行以下操作。

    int count = getSupportFragmentManager().getBackStackEntryCount();
    
    if(count > 1)
            getSupportFragmentManager().popBackStack();
    

    试试这个,看看它是否有效。

    也可以看看这个:http://developer.android.com/training/implementing-navigation/temporal.html#back-fragments

    【讨论】:

    • 谢谢,但是你怎么处理? Activity 中的onBackPressed 永远不会在您在导航抽屉打开的情况下按返回时调用。
    • 将您的抽屉布局设置为:'mDrawerLayout.setFocusableInTouchMode(false);" onBackPressed() 应该可以工作,如果没有尝试 onKeyDown
    • 实际上,只需设置setFocusableInTouchMode(false) 即可使后退按钮在抽屉中工作,无需任何额外代码。但是,现在抽屉不会关闭,onBackPresses() 仍然没有被调用。
    • 哦,等等,onBackPressed() 已被调用,但如果没有其他代码,它也无法正常工作...已经有一个 onBackPressed() 包含一些代码来更改早期实验留下的片段。跨度>
    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多