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 次 |
| 最近记录: |