Android 从片段中禁用导航抽屉
我有一个带有导航抽屉和4个导航项(片段)的应用程序。在其中一个片段中,我用一个视图寻呼机设置了一个选项卡布局(另外3个片段) 从这些内部片段中,我想动态禁用/启用导航抽屉。基本上,在按下按钮时,我想限制对导航抽屉的访问(再次按下时重新启用) 我该怎么做 我尝试从这个内部片段访问父活动的Android 从片段中禁用导航抽屉,android,android-fragments,navigation,android-toolbar,Android,Android Fragments,Navigation,Android Toolbar,我有一个带有导航抽屉和4个导航项(片段)的应用程序。在其中一个片段中,我用一个视图寻呼机设置了一个选项卡布局(另外3个片段) 从这些内部片段中,我想动态禁用/启用导航抽屉。基本上,在按下按钮时,我想限制对导航抽屉的访问(再次按下时重新启用) 我该怎么做 我尝试从这个内部片段访问父活动的DrawerLayout。但是我没有看到启用/禁用导航抽屉的方法 我将抽屉添加到主要活动中的方式: Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); s
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中的一个片段中执行此操作,而该片段又包含在主活动所拥有的片段中”-这并不真正相关,因为片段仍然直接连接到活动。CastgetActivity()
到您的界面
。此解决方案有效,谢谢。我如何更改图标以使其不可见。我在管理图标方面遇到了一般性问题。您是否正在寻找操作栏#setDisplayHomeAsUpEnabled(false)
可能?getSupportActionBar()。setDisplayHomeAsUpEnabled(false);为我工作。谢谢@MikeM。