我正在使用ActionBarCompat。当我加载子片段时,我希望主页按钮作为向上按钮。所以我从子片段中调用了这个:
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
但仍然没有将主页按钮显示为向上按钮。我还为android.R.id.home
中的ID onOptionsItemSelected
添加了逻辑,但它仍然不起作用。我有什么想法可以完成它吗?
答案 0 :(得分:8)
我已经挣扎了好几天,这就是我发现的工作。我希望有更好的解决方案,但这确实可以完成工作:
在我的主要活动(启动片段的活动)中,创建以下公共函数,该函数将由" child"片段:
// The method is in MainActivity.java
public void resetActionBar(boolean childAction, int drawerMode)
{
if (childAction) {
// [Undocumented?] trick to get up button icon to show
drawerToggle.setDrawerIndicatorEnabled(false);
mActionBar.setDisplayHomeAsUpEnabled(true);
} else {
drawerToggle.setDrawerIndicatorEnabled(true);
}
drawerLayout.setDrawerLockMode(drawerMode);
}
然后,从您想要显示“向上”按钮的片段中,只需按如下方式调用该方法(根据需要调整类名):
// This method in in SomeFragment.java
((MainActivity)getActivity()).resetActionBar(true,
DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
总结一下,以下是如何从片段启用按钮:
希望这会有所帮助,我希望将来这会变得更容易......
答案 1 :(得分:1)
参加派对迟到了:)
我正在分享这个,以便它可以帮助某人。我已经掌握了许多解决方案,但没有一个能够完美运行。我已经使用了我的项目中可用的解决方案的变体,如下所示。请在初始化工具栏和抽屉布局的类中使用此代码。
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);// show back button
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
} else {
//show hamburger
drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
drawerFragment.mDrawerToggle.syncState();
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawerFragment.mDrawerLayout.openDrawer(GravityCompat.START);
}
});
}
}
});
答案 2 :(得分:0)
我引用了答案并进行了这样的更改:
//add third parameter for Fragment
public void resetActionBar(boolean childAction, int drawerMode , final Fragment fragment) {
if (childAction) {
// [Undocumented?] trick to get up button icon to show
actionBarDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.mainFrame, fragment);
transaction.commit();
}
});
} else {
actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
}
drawerLayout.setDrawerLockMode(drawerMode);
}
我在其他片段中调用此函数,如下所示:
//new Homepage it's my one of fragments , you can pick up your destination
((MainActivity) getActivity()).resetActionBar(true,DrawerLayout.LOCK_MODE_LOCKED_CLOSED,new HomePage());
我仍然对生活圈问题感到困惑,这对你有帮助。
答案 3 :(得分:0)
class ABC : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? { {
(activity as MainActivity).supportActionBar?.setDisplayHomeAsUpEnabled(false)
}
}
答案 4 :(得分:-2)
试试这个,也不要忘记提及清单
中活动的父活动和元数据public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, intent);
// NavUtils.navigateUpFromSameTask(this);
// finish();
return true;
} else {
return super.onOptionsItemSelected(item);
}
}