Android Material Stepper, показывающий пустой вид после возврата к представлению

#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. Отлично! Если это ответило на ваш вопрос, обязательно установите флажок рядом с ответом, чтобы принять ответ и удалить вопрос из списка вопросов без ответов. Желаю удачи в дальнейшем!