#android #androidx #navigationcontroller #mat-stepper
#Android #androidx #navigationcontroller #mat-stepper
Вопрос:
я использую библиотеку Android Material Stepper, которая отлично работает при первой инициализации во фрагменте, но когда я возвращаюсь к фрагменту, он показывает пустой вид, я перепробовал все, пытался освободить макет шагового устройства, удалить все виды и все остальное, что мог, но все тот же ответ
private void initStepper2() {
Toast.makeText(getActivity(), "initStepper", Toast.LENGTH_SHORT).show();
mStepperLayout = mainView.findViewById(R.id.stepperLayout);
mStepperLayout.setSaveEnabled(false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
stepArrayList.clear();
stepArrayList.add(new FirstStepFragment());
stepArrayList.add(new ThirdStepFragment());
stepperAdapter = new StepperAdapter(getActivity().getSupportFragmentManager(), getActivity(), stepArrayList);
mStepperLayout.setAdapter(stepperAdapter);
mStepperLayout.requestLayout();
mStepperLayout.refreshDrawableState();
stepperAdapter.notifyDataSetChanged();
}
}, 300);
}
здесь я инициализирую stepper
@Override
public void onDetach() {
Toast.makeText(getActivity(), "OnDetach", Toast.LENGTH_SHORT).show();
// mStepperLayout.removeAllViews();
// mStepperLayout.removeAllViewsInLayout();
// mStepperLayout.refreshDrawableState();
// mStepperLayout.requestLayout();
// mStepperLayout.setAdapter(null);
super.onDetach();
}
@Override
public void onDestroyView() {
Toast.makeText(getActivity(), "onDestroyView", Toast.LENGTH_SHORT).show();
// mStepperLayout.removeAllViews();
// mStepperLayout.removeAllViewsInLayout();
// mStepperLayout.refreshDrawableState();
// mStepperLayout.requestLayout();
// mStepperLayout.setAdapter(null);
super.onDestroyView();
}
@Override
public void onPause() {
Toast.makeText(getActivity(), "onPause", Toast.LENGTH_SHORT).show();
// mStepperLayout.removeAllViews();
// mStepperLayout.removeAllViewsInLayout();
// mStepperLayout.refreshDrawableState();
// mStepperLayout.requestLayout();
// mStepperLayout.setAdapter(null);
super.onPause();
}
я пробовал все это, но все еще не получаю его
это то, что я получаю впервые при инициализации фрагмента
и это уже второй раз, когда я повторно перехожу к фрагменту
mainView.findViewById(R.id.L1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
navController = Navigation.findNavController(mainView);
navController.navigate(R.id.action_newComplaintFragment_to_registerNCFragment);
}
});
вот как я перехожу к фрагменту с помощью навигационного контроллера Android x через навигационную карту
Ответ №1:
Вы используете неправильный FragmentManager
здесь:
stepperAdapter = new StepperAdapter(getActivity().getSupportFragmentManager(), getActivity(), stepArrayList);
Всякий раз, когда ваш фрагмент полностью помещается в другой (например, ваш, mStepperLayout
являющийся частью вашего NewComplainFragment
), вам нужно использовать childFragmentManager
, а не FragmentManager действия:
stepperAdapter = new StepperAdapter(getChildFragmentManager(), getActivity(), stepArrayList);
Комментарии:
1. Отлично! Если это ответило на ваш вопрос, обязательно установите флажок рядом с ответом, чтобы принять ответ и удалить вопрос из списка вопросов без ответов. Желаю удачи в дальнейшем!