BottomSheetDialogFragment - указанный дочерний элемент уже имеет родителя.Сначала вы должны вызвать removeView () у родителя ребенка - PullRequest
1 голос
/ 19 сентября 2019

Я создал BottomSheetDialogUtil class, который расширяет BottomSheetDialogFragment.Этот класс можно использовать до тех пор, пока вы передаете представление, которое вы хотите отобразить в диалоговом окне нижнего листа.

Отображение BottomSheetDialogFragment работает при первом его показе, но при попыткепокажи его во второй раз, он падает

Здесь я вызываю класс BottomSheetDialogUtil

private void configureBudgetPeriodSpinner() {
    OrderPaymentCreditCardBudgetOptionsBinding binding = OrderPaymentCreditCardBudgetOptionsBinding.inflate(getLayoutInflater());

    BottomSheetDialogUtil bottomSheetDialog = BottomSheetDialogUtil.newInstance(binding.getRoot());

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(), R.array.credit_card_budget_period, R.layout.spinner_budget_option);

    binding.listView.setAdapter(adapter);

    binding.listView.setOnItemClickListener((aAdapterView, aView, aI, aL) -> {
      String string = binding.listView.getItemAtPosition(aI).toString();

      mBinding.formInclude.budgetOptionsTextInput.setText(string);
      mViewModel.setBudgetPeriod(CreditCardUtil.getBudgetPeriodInt(string));
      bottomSheetDialog.dismiss();
    });

    mBinding.formInclude.budgetOptionsTextInput.setOnClickListener(aView -> bottomSheetDialog.show(getFragmentManager(), "Bottom Sheet Dialog Fragment"));
  }

Это класс Util

public class BottomSheetDialogUtil extends BottomSheetDialogFragment {

  private static View mView;

  public static BottomSheetDialogUtil newInstance(View aView) {
    mView = aView;
    return new BottomSheetDialogUtil();
  }

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  }

  @Override
  public void setupDialog(Dialog dialog, int style) {
    dialog.setContentView(mView);
    ((View) mView.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent));
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
  }
}

Это ошибка, которую яполучаю

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.bidorbuy.app, PID: 21202
    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
        at android.view.ViewGroup.addViewInner(ViewGroup.java:5252)
        at android.view.ViewGroup.addView(ViewGroup.java:5083)
        at android.view.ViewGroup.addView(ViewGroup.java:5023)
        at android.view.ViewGroup.addView(ViewGroup.java:4996)
        at com.google.android.material.bottomsheet.BottomSheetDialog.wrapInBottomSheet(BottomSheetDialog.java:137)
        at com.google.android.material.bottomsheet.BottomSheetDialog.setContentView(BottomSheetDialog.java:88)
        at com.bidorbuy.app.v3.util.BottomSheetDialogUtil.setupDialog(BottomSheetDialogUtil.java:32)
        at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:333)
        at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1308)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:6986)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
...