我有MainActivity,它持有MapFragment。而且我其中很少有其他的framgents是TabFragment,它有用户设置。
我在activity_main.xml中添加了工具栏,如下所示:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:minHeight="?attr/actionBarSize"
app:theme="@style/Theme.AppCompat.NoActionBar"
app:popupTheme="@style/ToolbarStyle">
</android.support.v7.widget.Toolbar>
根据获得可见性的片段,我更改“标题”并将导航菜单(汉堡菜单)更改为向上箭头,反之亦然。以下是我用来做同样的方法:
//Method to show the toolbar..
protected void showToolbar(final boolean isAnimation) {
if (mToolbar != null) {
if (mActivity.getSupportActionBar() == null) {
mActivity.setSupportActionBar(mToolbar);
}
if (isAnimation) {
mToolbar.animate().translationY(0)
.setInterpolator(new DecelerateInterpolator()).start();
}
if (mToolbar.getVisibility() != View.VISIBLE) {
mToolbar.setVisibility(View.VISIBLE);
}
mActivity.getSupportActionBar().setHomeButtonEnabled(true);
mActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
//Method to change the title and color of the toolbar..
public void setToolbarColor(final String title, final int backgroundColor, final int textColor,
final boolean isNavigationIcon) {
if (mToolbar != null) {
mToolbar.setTitle(title);
mToolbar.setBackgroundColor(backgroundColor);
mToolbar.setTitleTextColor(textColor);
if (mActivity.getSupportActionBar() == null) {
mActivity.setSupportActionBar(mToolbar);
}
ActionBar actionBar = mActivity.getSupportActionBar();
actionBar.setHomeButtonEnabled(isNavigationIcon); // disable the button
actionBar.setDisplayHomeAsUpEnabled(isNavigationIcon); // remove the left caret
actionBar.setDisplayShowHomeEnabled(isNavigationIcon); // remove the icon
}
}
下面是我从MapFragment的onResume()调用这些方法的方法:
public void onResume() {
setToolbarColor(getString(R.string.title_main),
ContextCompat.getColor(getActivity(), R.color.blue),
ContextCompat.getColor(getActivity(), R.color.white),
false);
mActivity.unlockDrawer();
showToolbar(true);
}
这就是我从TabsFragment的onResume()调用这些方法的方式:
public void onResume() {
setToolbarColor(getString(R.string.title_tabs),
ContextCompat.getColor(mActivity, R.color.black),
ContextCompat.getColor(mActivity, R.color.white),
true);
mActivity.lockDrawer();
showToolbar(true);
}
所有在正常情况下都能正常工作.MapFragment显示&#39;导航图标&#39;它的标题和TabFragment显示&#39;向上箭头&#39;它的标题。
但是问题是当我在行中添加两个片段时,TabFragment仍会显示“导航”图标&#39;单击TabFragment销毁并左侧菜单打开。连续我的意思是我立即添加了Map和Tab片段。
mFragmentManager.beginTransaction().add(R.id.container, mapFragment, "map").addToBackStack("map").commit();
mFragmentManager.beginTransaction().add(R.id.container, tabsFragment, "tabs").addToBackStack("tabs").commit();
我这样做是因为我想启动制表符片段以强制用户填写缺少的内容。
我的尝试是什么 - 我认为可能是设置工具栏并且它的标题有计时问题所以我在3秒后添加了tabsFragment然后它工作正常,在TabsFragment上显示向上箭头。因此,看起来Actionbar或DrawerLayout和ActionbarDrawerToggle的方法不是可重入的方法,必须进行同步。我不确定。
有任何线索吗?