【问题标题】:How to hide the "Up button" in the top Fragment and show it in other Fragments?如何隐藏顶部 Fragment 中的“向上按钮”并在其他 Fragment 中显示?
【发布时间】:2015-03-17 12:57:41
【问题描述】:

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

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

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

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);

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

【问题讨论】:

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


    【解决方案1】:

    在 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);
        }
    

    【讨论】:

    • 使用 androidx 中的MainActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListenergetSupportActionBar() 的效果也相当。
    【解决方案2】:

    你很幸运,因为在 API 级别 18 中有这样的:

    getActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);  
    

    对于支持库,它是:

    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);  
    

    所以现在根据您所在的片段,您可以更改“向上”按钮的图标。

    另外,试试这个:

    getActionBar().setDisplayHomeAsUpEnabled(false);
    

    设置是否应将家显示为“向上”可供性。

    【讨论】:

    • 你知道如何隐藏插入符号“
    • 最后一部分。 setDisplayHomeAsUpEnabled().
    • 只是一个快速提示:如果您想更改 ActionBar 的外观,请始终查看 setDisplay* 方法。总有一些东西在那里。
    • 这对我有帮助 ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);
    【解决方案3】:

    2021 年工作解决方案:

    (requireActivity() as AppCompatActivity).supportActionBar?.setHomeAsUpIndicator(null)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多