android - 如何隐藏顶部Fragment中的 "Up button"并显示在其他Fragment中?

标签 android android-fragments android-actionbar android-navigation up-button

在与蓝牙相关的应用程序(minSdkVersion="18")中,我有一个 MainActivity.java,显示以下 3 个 UI fragment 之一:

  • MainFragment.java(顶部屏幕)
  • SettingsFragment.java(设置界面,通过菜单进入)
  • ScanningFragment.java(列出附近的蓝牙设备)

screenshot

要显示“向上按钮”并处理“后退按钮”,我有以下代码:

public class MainActivity extends Activity 
                          implements BleWrapperUiCallbacks {

    // set in onResume() of each fragment
    private Fragment mActiveFragment = null;

´   @Override
    public void onBackPressed() {
        if (!getFragmentManager().popBackStackImmediate())
            super.onBackPressed();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_ACTION_BAR);
        setContentView(R.layout.activity_root);
        getActionBar().setDisplayHomeAsUpEnabled(true);

        if (savedInstanceState == null) {
            Fragment fragment = new MainFragment();
            getFragmentManager().beginTransaction()
                .replace(R.id.root, fragment, "main")
                .commit();
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                getFragmentManager().popBackStackImmediate();
                break;

            case R.id.action_settings:
                Fragment fragment = new SettingsFragment();
                getFragmentManager().beginTransaction()
                    .addToBackStack(null)
                    .replace(R.id.root, fragment, "settings")
                    .commit();
                break;
        }

        return super.onOptionsItemSelected(item);
    }

这很好用,但有一个外观问题,当显示 MainFragment.java 时“向上按钮”仍然显示 - 正如您在上面屏幕截图的左侧所见.

我试过打电话

getActionBar().setHomeButtonEnabled(false);

当该 fragment 处于 Activity 状态时,但这只会禁用“向上按钮” - 而不会真正隐藏它。

最佳答案

在 Little Child 的帮助下(谢谢!),我的解决方案是使用 FragmentManager.OnBackStackChangedListener :

public class MainActivity extends Activity 
                          implements OnBackStackChangedListener,
                                    BleWrapperUiCallbacks {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        getFragmentManager().addOnBackStackChangedListener(this);
    }

    @Override
    public void onBackStackChanged() {
        getActionBar().setDisplayHomeAsUpEnabled(
            getFragmentManager().getBackStackEntryCount() > 0);
    }

关于android - 如何隐藏顶部Fragment中的 "Up button"并显示在其他Fragment中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29099702/

相关文章:

android - fragment 内的微调器

java - 如何在 Fragment 中实现 Google Maps 并使用 GoogleMap 对象?

android - 样式 Action 模式

Android 工具栏操作按钮不显示

android - 修复了可滚动 RelativeLayout 中的 FAB 按钮

java - Android 按钮仅在第二次单击时启动方法

android - 参数通过Gradle从Main App传递到Library项目

android - 从 SQLite 数据库获取纬度和经度以在 Android MapOverlay 中使用

android - Android 中 Fragments 和 Activity 之间的数据共享

Android ActionBar 菜单点(带 3 个点)