如何实现android工具栏后退按钮
作者:互联网
我正在使用自定义工具栏.我需要添加回按钮.现在我使用此代码添加后退按钮.
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setBackgroundColor(getResources().getColor(R.color.white));
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
这很好用.我可以看到添加了后退按钮.但请考虑我在Fragment1中没有后退按钮的情况.现在我转到Fragment2,然后添加Back Button.从片段2我打开片段3然后我再次添加后退按钮.
现在,当我按下fragment3中的后退按钮返回到fragment2时,我必须检查片段堆栈以查看片段2中是否需要后退按钮.
当我们将片段推送到堆栈时,还有其他方法可以自动处理后退按钮吗?
解决方法:
您可以非常轻松地处理后退图标.如果你的所有片段都在单个Activity中,我真的建议用以下方式处理它:
首先创建一个抽象的BaseFragment类,它实现了FragmentManager .OnBackStackChangedListener,然后在其中放入以下方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainActivity = (MainActivity) getActivity();
getFragmentManager().addOnBackStackChangedListener(this);
shouldDisplayHomeUp();
}
@Override
public void onBackStackChanged() {
shouldDisplayHomeUp();
}
public boolean shouldDisplayHomeUp() {
//Enable Up button only if there are entries in the back stack
boolean canBack = false;
try {
canBack = getFragmentManager().getBackStackEntryCount() > 0;
} catch (Exception ex) {
// Log.e(getClass().getCanonicalName(), ex.getMessage());getMessage
}
if (canBack) {
mainActivity.drawerDisable();
} else {
mainActivity.drawerEnable();
}
return canBack;
}
通过这种方式disableDrawer& enableDrawer函数处理你的Icon和OnBackPressed方法在你的活动中处理你的BackStack,如果你需要按下后退图标显示.你的onBackPressed应该是这样的:
int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
if (backStackCount == 0) {
//nothing exist in backStack OS handle it
super.onBackPressed();
} else {
getSupportFragmentManager().popBackStack();
}
查看完整实施here.
标签:android,android-toolbar,android-navigation 来源: https://codeday.me/bug/20191006/1860525.html