Android 操作栏的片段生命周期问题

Android fragment lifecycle issue with actionbar

我想用下面的代码实现片段的导航:

public abstract class BaseFragment extends Fragment {
    private static String TAG = "BaseFragment";
    private BaseFragmentActions baseFragmentActions;
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        Activity activity = null;
        if (context instanceof Activity){
            activity = (Activity) context;
        }
        Log.i(TAG, "onAttach = ");
        try {
            baseFragmentActions = (BaseFragmentActions)activity;

        } catch (ClassCastException e) {
        }
        Log.i("onAttach",""+(getBackStackCount()!=0));
        baseFragmentActions.resetToolbarNavigation(getBackStackCount()!=0);
    }
    @Override
    public void onDetach() {
        super.onDetach();
        Log.i("BaseFragment", "onDestroy = " + (getBackStackCount() - 1));
        baseFragmentActions.resetToolbarNavigation((getBackStackCount() - 1) != 0);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    private int getBackStackCount() {
        int b = getActivity().getSupportFragmentManager().getBackStackEntryCount();
        Log.i("getBackStackEntryCount", "====== "+b);
        return b;
    }

    public interface BaseFragmentActions {
        public void resetToolbarNavigation(boolean backNavigationEnabled);
    }
}

我所有的片段都扩展了这个 Base Activity。在我的主要 activity 中,我实现了 BaseFragmentActions,并实现了这个方法:

 @Override
    public void resetToolbarNavigation(boolean backNavigationEnabled) {
        Log.i("BaseActivity", "reset " + backNavigationEnabled);
            getSupportActionBar().setDisplayHomeAsUpEnabled(backNavigationEnabled);
            if (backNavigationEnabled) {
                mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Log.i("resetToolbarNavigation", "setNavigationOnClickListener");
                        onBackPressed();
                    }
                });
            } else {
                initNavigation();
                syncState();
            }
    }

一切正常,但是当我更改屏幕方向时,我们收到 getSupportActionBar = null 错误。 这是因为我称之为 going attach。我该如何解决这个错误?我试图检查 getSupportActionBar 是否不为零。我没有收到错误,但是 "up" 箭头替换了汉堡包...

建议您在这种情况下可以做什么。还共享链接以导航此类片段的实现。对不起,如果写错了,或者我犯了语法错误))。

您好,很抱歉延迟回答,您遇到的问题是因为调用 onAttach 时尚未设置 getSupportActionBar(),相反您需要确保 Activity 已创建与 Activity 组件交互时,只需将调用放在 Fragment 的 onActivityCreated 方法中,如下所示:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    baseFragmentActions.resetToolbarNavigation(getBackStackCount()!=0);
}