【问题标题】:Show/Hide DrawerLayout depends on current fragment显示/隐藏 DrawerLayout 取决于当前片段
【发布时间】:2013-08-10 13:01:48
【问题描述】:

我有一个 Activity 类,它有一个 DrawerLayout。该布局在抽屉中显示一个列表,让用户在fragments 之间切换。在这些Fragments 中,有一些 URL,当用户点击这些 URL 时,会显示一个 WebviewFragment。但是,我不想在WebViewFragment 中显示DrawerLayout。相反,我希望用户被重定向到以前的Fragment

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用此方法锁定或解锁抽屉: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);
    }
    

    【讨论】:

    • 试试ActionBarDrawerToggle.setDrawerIndicatorEnabled()方法
    【解决方案2】:

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

    或者,您不必自己有这样的活动,您可以让 Android 找到一个浏览器供他们打开,而不是使用以下代码:

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

    【讨论】:

    • 1.实际上,我不确定何时开始新活动以及何时将片段添加到后台堆栈。但我认为显示片段的开销更少(与启动新活动相比加载时间更少)据我了解,许多应用程序只有一个 MainActivity 和许多片段。 2.很多app都有自己的WebViewFragment/WebViewActivity来展示一个简单的web。因为只是不希望用户离开应用程序。
    • 显示一个新的 Activity 不应该比创建一个新的 Fragment 花费明显更长的时间。我认为实际上加载时间将更多地取决于网页加载所需的时间。如果您想将 suer 保留在您的应用程序中,只需将代码从您的 WebView 片段移动到 Activity 并使用它。或者查看我的其他答案以坚持您当前的方法。
    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2014-09-06
    • 1970-01-01
    • 2020-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多