我正在开发一个应用程序,其中我有一个片段“A”和片段“B”,我在片段“A”中有一个导航抽屉。当我切换到碎片“B”时我想要的东西我想要导航抽屉图标会改变回来Icon.How我能做到这一点请告诉。
答案 0 :(得分:1)
第一个:在你的Activity(持有工具栏和主页按钮的那个)中你需要创建一个布尔变量(一个标志)来标记主页按钮是三明治菜单还是背面箭头。
public class TheActivity {
private boolean backButtonEnabled = false; //starting with the menu icon
...
}
第二:在您的活动(持有工具栏和主页按钮的活动)中,您需要创建一个方法enableBackButton(boolean enable)
,如果启用该方法会将工具栏主页图标更改为后退箭头为true或三明治菜单(如果启用)为false并设置相应的布尔标志。
public class TheActivity {
...
public void enableBackButton(boolean enable) {
this.backButtonEnabled = enable;
if(enable) {
toolbar.setNavigationIcon(backIcon);
} else {
toolbar.setNavigationIcon(sandwichIcon);
}
}
}
第三:在片段B(以及其他片段)中,当您到达getActivity().enableBackButton(true/false)
和onCreateView()
时,应致电onDestroyView()
。此时,如果您运行该应用程序,您将能够更改片段并查看主页按钮更改而不设置操作。
public class FragmentB {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
((TheActivity)getActivity().enableBackButton(true);
...
}
@Override
public void onDestroyView() {
((TheActivity)getActivity().enableBackButton(false);
super.onDestroyView();
}
}
上次:您需要在onOptionsItemSelected(MenuItem item)
中点击主页按钮,具体取决于按钮更改时设置的标记backButtonEnabled
。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home: {
if(backButtonEnabled) actionBack(); //desired back action
else actionSandwich(); //open drawer
break;
}
}
return super.onOptionsItemSelected(item);
}
我希望这能找到你并帮助你的应用程序! 此致!
答案 1 :(得分:0)
首先:在您的片段中,将这两行添加到onCreateView
((MainActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((MainActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
第二:在您的活动中添加此功能以添加片段
public void addFragment(String title, Fragment fragment) {
setToolbarTitle(title);
FragmentUtils.addFragment(this, fragment,
fragmentContainer, true, null);
hideToolbarHamburger(true);
}
并记得将汉堡包放回onBackPressed
@Override
public void onBackPressed() {
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
mDrawerLayout.closeDrawer(GravityCompat.START);
}
hideToolbarHamburger(false);
}
第三:魔术来了 按照提及的here
添加此代码public void hideToolbarHamburger(boolean show) {
if(show) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
actionBarDrawerToggle.setDrawerIndicatorEnabled(false);
if(!mToolBarNavigationListenerIsRegistered) {
actionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
mToolBarNavigationListenerIsRegistered = true;
}
} else {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
actionBarDrawerToggle.setToolbarNavigationClickListener(null);
mToolBarNavigationListenerIsRegistered = false;
}
}