При текущей реализации моего приложения я использую Навигационный компонент . В моем основном контенте у меня есть плавающая кнопка действия для всех. И в то же время у меня есть 7 различных фрагментов, которые автоматически обрабатываются контроллером навигации при необходимости перехода.
mAppBarConfiguration =
new AppBarConfiguration.Builder( navigationDrawerFragmentIds ).setDrawerLayout( drawer ).build();
NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
До сегодняшнего дня я использовал метод setUserVisibleHint (boolean isVisibleToUser) для переопределения другого поведения (при нажатии слушатель) для моего отдельного потрясающего в каждом отдельном фрагменте.
Как показано ниже
// FIXME: 2.11.2019 Fix deprecated methods.
@Override public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint( isVisibleToUser );
if (isVisibleToUser && isResumed()) {
//Only manually call onResume if fragment is already visible
//Otherwise allow natural fragment lifecycle to call onResume
onResume();
} else {
// current fragment not visible
floatingActionButton.setOnClickListener( null );
}
}
@Override public void onResume() {
super.onResume();
// FIXME: 2.11.2019 Fix deprecated methods.
if (!getUserVisibleHint()) {
return;
}
// Set listener for float action button which has been defined in main activity.
// Here we will override the listener which can be work for our current fragment.
floatingActionButton = getActivity().findViewById( R.id.fab );
floatingActionButton.setOnClickListener( new View.OnClickListener() {
@Override public void onClick(View view) {
// do some stuff here.
}
} );
}
Поскольку setUserVisibleHint больше не поддерживается, я хотел заменить новое поведение вместо этого метода, как предложено в примечании к выпуску ,
Максимальный жизненный цикл: теперь вы можете установить максимальное состояние жизненного цикла для фрагмента, вызвав setMaxLifecycle () для FragmentTransaction. Это заменяет устаревший теперь setUserVisibleHint (). FragmentPagerAdapter и FragmentStatePagerAdapter имеют новый конструктор, который позволяет переключаться на новое поведение.
А также контроллер навигации по умолчанию FragmentNavigator, как я понял, но я не мог понять, эта помощь для меня, чтобы установить жизненный цикл фрагментов или поведение, как этот пост . Если я могу установить поведение, подобное упомянутому посту, тогда я в основном могу использовать onResume и onStart (я предполагаю, что это будет работать так, потому что, когда я выбираю BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, следующий фрагмент не будет инициирован. Предполагается, что только onCreateView вызывается.)
Как я объяснил выше, я использую компонент навигации для обработки перехода между моими фрагментами. Вот почему у меня нет особого просмотра пейджера. Но я все еще могу получить информацию с помощью приведенного ниже кода, который будет обрабатывать текущий пункт назначения и обратный вызов всякий раз, когда происходит переход между фрагментами.
navController.addOnDestinationChangedListener( new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination,
@Nullable Bundle arguments) {
Log.i( TAG, "onDestinationChanged: " + destination.getLabel());
}
} );
Затем в своей основной деятельности я могу установить различное поведение для моего потрясающего для каждого фрагмента , До сих пор это хорошо для меня. Но я хотел узнать, есть ли способ установить максимальный жизненный цикл фрагмента при использовании компонента навигации?
Заранее спасибо.