0

Я хочу реализовать навигацию фрагментов, используя следующий код:Android вопрос фрагмент жизненного цикла с 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); 
    } 
} 

Все мои фрагменты расширить эту базовую активность. И в моей основной деятельности я реализовать 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 = нуль. Это из-за того, что я называю присоединением. Как я могу исправить эту ошибку? Я попытался проверить, не getSupportActionBar не ноль. Я не получаю ошибку, но «вверх» стрелка заменила гамбургер ...

Посоветуйте, что вы можете сделать в этом случае. Также используйте ссылки для навигации по реализации таких фрагментов. Извините, если что-то неправильно написано, или я сделал грамматическую ошибку)).

ответ

1

Здравствуйте, извините за задержку ответа, проблема, с которой вы столкнулись, связана с тем, что когда onAttach называется getSupportActionBar() еще не установлен, вместо этого вам нужно убедиться, что Activity уже создана при взаимодействии с Activity компонентов, поэтому просто введите свой вызов внутри метода onActivityCreated вашего фрагмента следующим образом:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    baseFragmentActions.resetToolbarNavigation(getBackStackCount()!=0); 
} 
Смежные вопросы