Mar*_*cel 22 android toolbar navigation-drawer drawertoggle
我正在努力工作的工具栏和抽屉.我正在尝试将汉堡切换为箭头,当我向后台堆叠添加新片段但是没有办法做到这一点.
也许我错过了一些东西,但我找不到办法.有人有同样的问题吗?
这是声明:
mDrawerToggle = new ActionBarDrawerToggle(
getActivityCompat(), /* host Activity */
mDrawerLayout, /* DrawerLayout object */
((BaseActivity) getActivityCompat()).getToolbar(),
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
R.string.navigation_drawer_close /* "close drawer" description for accessibility */
)
Run Code Online (Sandbox Code Playgroud)
这是我将一个片段添加到后栈时调用的函数
public void setToggleState(boolean isEnabled) {
if (mDrawerLayout == null)
return;
if (isEnabled) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
mDrawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_UNLOCKED);
} else {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
mDrawerToggle.syncState();
}
Run Code Online (Sandbox Code Playgroud)
hat*_*ata 32
我想你要做的就是删除第三个参数.从而:
mDrawerToggle = new ActionBarDrawerToggle(
getActivityCompat(), /* host Activity */
mDrawerLayout, /* DrawerLayout object */
// ((BaseActivity) getActivityCompat()).getToolbar(), <== delete this argument
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
R.string.navigation_drawer_close /* "close drawer" description for accessibility */
);
Run Code Online (Sandbox Code Playgroud)
愿它有所帮助.
hor*_*urh 12
我有同样的问题.我的解决方案是:
确保您的活动实现onBackStackChangedListener.在你的活动'onCreate中,我设置了backstack监听器,并设置了工具栏
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFm = getFragmentManager();
mFm.addOnBackStackChangedListener(this);
// Setup toolbar
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setVisibility(View.VISIBLE);
setSupportActionBar(mToolbar);
// Setup drawer toggle
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.menu_open, R.string.menu_close);
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerToggle.syncState();
// Setup initial fragment
if (savedInstanceState == null) {
mCurrentFragment = DashboardFragment.newInstance();
mFm.beginTransaction().add(CONTAINER_ID, mCurrentFragment).commit();
}
}
Run Code Online (Sandbox Code Playgroud)
还记得设置:
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
Run Code Online (Sandbox Code Playgroud)
现在魔术发生在onBackStackChanged()上.将最顶层片段的setDrawerIndicatorEnabled设置为true,将该片段设置为setDisplayHomeAsUpEnabled为false.反向其他的.我还必须调用syncState,否则汉堡包不会再出现:
@Override
public void onBackStackChanged() {
mDrawerToggle.setDrawerIndicatorEnabled(mFm.getBackStackEntryCount() == 0);
getSupportActionBar().setDisplayHomeAsUpEnabled(mFm.getBackStackEntryCount() > 0);
mDrawerToggle.syncState();
}
Run Code Online (Sandbox Code Playgroud)