Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从片段中禁用导航抽屉_Android_Android Fragments_Navigation_Android Toolbar - Fatal编程技术网

Android 从片段中禁用导航抽屉

Android 从片段中禁用导航抽屉,android,android-fragments,navigation,android-toolbar,Android,Android Fragments,Navigation,Android Toolbar,我有一个带有导航抽屉和4个导航项(片段)的应用程序。在其中一个片段中,我用一个视图寻呼机设置了一个选项卡布局(另外3个片段) 从这些内部片段中,我想动态禁用/启用导航抽屉。基本上,在按下按钮时,我想限制对导航抽屉的访问(再次按下时重新启用) 我该怎么做 我尝试从这个内部片段访问父活动的DrawerLayout。但是我没有看到启用/禁用导航抽屉的方法 我将抽屉添加到主要活动中的方式: Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); s

我有一个带有导航抽屉和4个导航项(片段)的应用程序。在其中一个片段中,我用一个视图寻呼机设置了一个选项卡布局(另外3个片段)

从这些内部片段中,我想动态禁用/启用导航抽屉。基本上,在按下按钮时,我想限制对导航抽屉的访问(再次按下时重新启用)

我该怎么做

我尝试从这个内部片段访问父活动的
DrawerLayout
。但是我没有看到启用/禁用导航抽屉的方法

我将抽屉添加到主要活动中的方式:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);

(当然,我还添加了
toggle.syncState()
onPostCreate
方法中执行。

一种干净的方法是创建
活动
实现的
接口
,通过该接口,
片段
可以调用
活动
的本地方法来处理抽屉锁和切换按钮状态。例如:

public interface DrawerLocker {
    public void setDrawerEnabled(boolean enabled);
}
活动
界面
方法中,我们只需计算
抽屉布局#setDrawerLockMode()
调用的锁模式常数,并在
ActionBarDrawerToggle
上调用
setDrawerIndicatorEnabled()

public class MainActivity extends Activity implements DrawerLocker {

    public void setDrawerEnabled(boolean enabled) {
        int lockMode = enabled ? DrawerLayout.LOCK_MODE_UNLOCKED :
                                 DrawerLayout.LOCK_MODE_LOCKED_CLOSED;
        drawer.setDrawerLockMode(lockMode);
        toggle.setDrawerIndicatorEnabled(enabled);
    }

    ...
}
片段
中,我们只需要将托管
活动
强制转换到
接口
,并相应地调用
setDrawerEnabled()
方法。例如,要锁定抽屉关闭:

((DrawerLocker) getActivity()).setDrawerEnabled(false);


注意:从v7 appcompat支持库的23.2.0版开始,
ActionBarDrawerToggle
尊重
DrawerLayout
的锁定模式,并且如果抽屉处于锁定状态,则不会切换抽屉状态。这意味着不必严格使用
setDrawerIndicatorEnabled()
,但可能仍需要这样做,以便向用户提供切换已禁用的视觉指示。

抽屉布局使用
setDrawerLockMode()
,对
ActionBarDrawerToggle使用
setDrawerLockMode()
设置
setDrawerLockMode()
停止了刷卡手势。但要设置
setDrawerIndicatorEnabled()
,我如何从片段中访问
ActionBarDrawerToggle
?理想情况下,您应该通过活动实现的
接口执行此操作,活动中的
接口的方法调用上述方法。@MikeM.Yep,我尝试过这样做。但是事情变得非常复杂,因为我我尝试在选项卡布局的ViewPager中的一个片段中执行此操作,而该片段又包含在主活动所拥有的片段中:-/如果您可以提供任何有关执行此操作的提示(如伪代码?或基本代码结构?),那将非常棒“但事情变得非常复杂,因为我试图在选项卡布局的ViewPager中的一个片段中执行此操作,而该片段又包含在主活动所拥有的片段中”-这并不真正相关,因为片段仍然直接连接到活动。Cast
getActivity()
到您的
界面
。此解决方案有效,谢谢。我如何更改图标以使其不可见。我在管理图标方面遇到了一般性问题。您是否正在寻找
操作栏#setDisplayHomeAsUpEnabled(false)
可能?getSupportActionBar()。setDisplayHomeAsUpEnabled(false);为我工作。谢谢@MikeM。