Ros*_*nal 10 navigation android android-fragments android-toolbar
我有一个带导航抽屉的应用程序和4个导航项目(碎片).在其中一个片段中,我有一个标签布局设置了一个视图寻呼机(另外3个片段).
从这些内部片段中的一个,我想动态地禁用/启用导航抽屉.基本上,按下按钮,我想限制对导航抽屉的访问(并再次按下它时重新启用).
我该怎么办?
我尝试DrawerLayout
从这个内部片段访问父活动.但我没有看到启用/禁用导航抽屉的方法.
我将抽屉添加到主Activity的方式:
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);
Run Code Online (Sandbox Code Playgroud)
(当然我已经toggle.syncState()
从onPostCreate
方法中添加了.
Mik*_* M. 54
一个干净的方式做,这是创建interface
的Activity
工具,通过它Fragment
可以调用本地的方法Activity
来处理抽屉的锁和切换按钮的状态.例如:
public interface DrawerLocker {
public void setDrawerEnabled(boolean enabled);
}
Run Code Online (Sandbox Code Playgroud)
在Activity
的interface
方法,我们只是数字为锁定模式不断DrawerLayout#setDrawerLockMode()
呼叫,并调用setDrawerIndicatorEnabled()
上ActionBarDrawerToggle
.
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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
在Fragment
,我们只需要将托管Activity
转换为interface
,并相应地调用setDrawerEnabled()
方法.例如,要关闭抽屉:
((DrawerLocker) getActivity()).setDrawerEnabled(false);
Run Code Online (Sandbox Code Playgroud)
注意:从v7 appcompat支持库的版本23.2.0开始,ActionBarDrawerToggle
尊重DrawerLayout
锁定模式,如果它被锁定,则不会切换抽屉状态.这意味着并非严格必须使用setDrawerIndicatorEnabled()
,但仍可能希望仍然这样做以便向用户提供禁用切换的视觉指示.
归档时间: |
|
查看次数: |
14196 次 |
最近记录: |