为ActionBarCompat中的片段调用setDisplayHomeAsUpEnabled

Raq*_*nak 12 android android-fragments android-actionbar-compat

我正在使用ActionBarCompat.当我加载子片段时,我希望主页按钮作为向上按钮.所以我从子片段调用了这个:

((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

但仍然没有将主页按钮显示为向上按钮.我还增加了逻辑的ID android.R.id.homeonOptionsItemSelected,但它仍然无法正常工作.我有什么想法可以完成它吗?

rod*_*ira 9

在这漫长的几天里,我一直在努力解决这个问题,而这正是我发现的工作方式.我希望有一个更好的解决方案,但这确实可以完成工作:

在我的主要活动(启动片段的那个)中,创建以下公共函数,该函数将由"子"片段调用:

// 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);
}
Run Code Online (Sandbox Code Playgroud)

然后,从您想要显示"向上"按钮的片段中,只需按如下方式调用该方法(根据需要调整类名):

// This method in in SomeFragment.java
((MainActivity)getActivity()).resetActionBar(true,
      DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
Run Code Online (Sandbox Code Playgroud)

总结一下,这里是如何从片段启用按钮:

  • 禁用drawerToggle对象上的抽屉指示器 - 调用setDrawerIndicatorEnabled(false)
  • 设置displayHomeAsUp - 在actionBar对象上调用setDisplayHomeAsUpEnable(true)
  • (可选)锁定抽屉,使其不会出现在边缘滑动上

希望这会有所帮助,我希望将来这会变得更容易......


Lok*_*oid -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);
    }
}
Run Code Online (Sandbox Code Playgroud)