Динамическое добавление viewgroup в BottomSheetDialogFragment ничего не показывает - PullRequest
0 голосов
/ 10 октября 2019

Я хотел создать абстрактный BottomSheetDialogFragment только с заголовком в макете, а затем динамически добавлять пользовательский макет содержимого в его дочерние классы. Но когда я запускаю программу, она показывает только заголовок.

public abstract class BaseBottomSheetDialog extends BottomSheetDialogFragment {

    @BindView(R.id.tvTitle)
    TextView tvTitle;

    @BindView(R.id.vgRoot)
    LinearLayout vgRoot;

    public abstract String getTittle();

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);

        dialog.setOnShowListener(dialog1 -> {
            BottomSheetDialog d = (BottomSheetDialog) dialog1;
            FrameLayout bottomSheet = d.findViewById(com.google.android.material.R.id.design_bottom_sheet);
            BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
        });
        return dialog;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_bottom_sheet, container, false);
        ButterKnife.bind(this, view);
        setContentViews();
        return view;
    }

    public void setContentViews() {
        tvTitle.setText(getTittle());
        View content = LayoutInflater.from(getActivity()).inflate(R.layout.child_layout, vgRoot, false);
        vgRoot.addView(content);
        vgRoot.invalidate();

    }
}

frag_bottom_sheet.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/vgRoot"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

        <TextView
            android:id="@+id/tvTitle" />

</LinearLayout>

child_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout>
      <!--child items-->

</LinearLayout>

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Попробуйте вызвать метод setContentViews () в методе фрагмента onActvitiyCreated ().

0 голосов
/ 11 октября 2019

поместите фрагмент кода в setupDialog () для решения проблемы

@Override
public void setupDialog(@NonNull Dialog dialog, int style) {
    super.setupDialog(dialog, style);

    View contentView = View.inflate(getContext(), R.layout.fragment_bottom_sheet, null);
    vgRoot = contentView.findViewById(R.id.vgRoot);

    View content = LayoutInflater.from(getActivity()).inflate(getContentLayout(), vgRoot, false);
    vgRoot.addView(content);
    dialog.setContentView(contentView);

    }
...