0

我想实现用下面的代码片段的导航:Android的片段生命周期的问题与动作条

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

我所有的片段扩展这个基本活动。而我的主要活动中我实现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。 这是因为我称之为附加。我该如何解决这个错误?我试图检查getSupportActionBar是否不为零。我没有得到一个错误,但“向上”箭头取代了汉堡包...

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

回答

1

嗨,对不起,在回答中的延迟,你遇到的问题是因为当onAttach被调用时,getSupportActionBar()还没有设置,相反你需要确保Activity与Activity进行交互时已经创建组件,因此只需将您的呼叫放入您的Fragment的onActivityCreated方法内,如下所示:

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