显示/隐藏DrawerLayout取决于当前片段

时间:2013-08-10 04:09:15

标签: android android-fragments android-actionbar android-support-library

我的Activity班级有DrawerLayout。该布局在Drawer中显示一个列表,让用户在fragments之间切换。在这些Fragments中,有一些网址,当用户使用clicsk时,会显示WebviewFragment。但是,我不想在DrawerLayout中显示WebViewFragment。相反,我希望用户可以重定向到之前的Fragment

我有什么方法可以显示/隐藏DrawerLayout取决于当前的Fragment是什么? 我试着打电话给mDrawerLayout.setVisibility(View.GONE),但似乎并不完整。至少ActionBar图标仍然是抽屉图标。

2 个答案:

答案 0 :(得分:18)

您可以使用此方法锁定或解锁抽屉:DrawerLayout.setDrawerLockMode(...)。 (此方法还有另外两个版本,用于为特定抽屉指定锁定模式。)要锁定,请使用DrawerLayout.LOCK_MODE_LOCKED_CLOSED;要解锁,请使用DrawerLayout.LOCK_MODE_UNLOCKED

如果您正在使用ActionBarDrawerToggle,则需要添加一些额外的代码,以防止在您锁定抽屉时单击ActionBarDrawerToggle时抽屉打开。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // check lock mode before passing to ActionBarDrawerToggle
    // I assume your drawer is on the left; if not, use Gravity.RIGHT
    int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT);
    if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED &&
            mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle your other action bar items...

    return super.onOptionsItemSelected(item);
}

答案 1 :(得分:1)

为什么不打开一个只有WebView作为其内容的新Activity?然后用户必须按后退按钮返回带有DrawerLayout的Activity,然后就没有问题了。

或者,您不必自己进行此类活动,您可以让Android找到一个浏览器,以便使用此代码打开它们:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("HTTP_URL_GOES_HERE"));
startActivity(intent);