android - 操作栏标题不变

标签 android android-actionbar

我有带抽屉导航的 MainActivity。 这是 MainActivity.java 中的两个函数

    @Override
public void onNavigationDrawerItemSelected(int position) {
    Fragment fragment;
    FragmentManager fragmentManager = getSupportFragmentManager();
    switch(position) {
        default:
        case 0:
            fragment = new AlarmClockFragment().newInstance(position);
            break;
        case 1:
            fragment = new SettingsFragment().newInstance(position);
            break;
    }
    fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
}

public void onSectionAttached(int number) {
    switch (number) {
        case 0:
            mTitle = getString(R.string.title_section1);
            break;
        case 1:
            mTitle = getString(R.string.title_section2);
            break;
    }
}

在每个 fragment 中,我都有更改操作栏标题的方法。我是这样做的:

我有:

private static final String ARG_SECTION_NUMBER = "section_number";
private int mSectionNumber = 0;
private OnFragmentInteractionListener mListener;

我得到 ARG_SECTION_NUMBER:

    public static AlarmClockFragment newInstance(int param1) {
    AlarmClockFragment fragment = new AlarmClockFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, param1);
    fragment.setArguments(args);
    return fragment;
}

    @Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (OnFragmentInteractionListener) activity;
        ((MainActivity) activity).onSectionAttached(mSectionNumber);
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

代码类似于两个 fragment (AlarmCLockFragment 和 SettingsFragment),但它不起作用。

如果我不使用变量 mSectionNumber 而只写 ((MainActivity) activity).onSectionAttached(0); 一切都会很好。所以我找不到初始化mSectionNumber的问题。

在这里设置标题():

public void restoreActionBar() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    actionBar.setDisplayShowTitleEnabled(true);
    actionBar.setTitle(mTitle);
}

fragment 中的 onCreate():

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mSectionNumber = getArguments().getInt(ARG_SECTION_NUMBER);
    }
}

最佳答案

为什么不直接让 Fragments 设置标题呢?

onActivityCreated 或类似调用中:

((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(...)

编辑:您的特定问题的解决方案是在 fragment 生命周期中 onCreate 之前调用 onAttach 。这是一个很好的资源:http://staticfree.info/~steve/complete_android_fragment_lifecycle.png

关于android - 操作栏标题不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28218738/

相关文章:

android - 我可以知道制造商配对的蓝牙设备型号吗?

android - 使用支持库时如何更改操作栏背景?

android - getActionBar 总是返回 null

android - 带有操作栏的 requestFeature

Android:SearchView组件更改图标(无ActionBar)

android - 复制谷歌加 float 工具栏菜单

android - 如何使用工作管理器 2.0 返回 ListenableFuture<Result>?

android - Firebase SMS 验证/身份验证在某些设备上不起作用

java - 在 Android 上将 View 变为可编辑状态

java - 无限旋转的 ObjectAnimator 卡顿