BottomSheetDialogFragment

BottomSheetDialogFragment

我正在使用支持库中的BottomSheetDialogFragment,它警告我,setupDialog()函数应仅在库组中使用。但是此函数是我初始化对话框的地方:

@Override
public void setupDialog(final Dialog dialog, int style) {
    super.setupDialog(dialog, style);
    FragmentArgs.inject(this);

    dialog.setOnShowListener(dialogINterface -> {
        if(dialog.getWindow() != null) {
            dialog.getWindow().setLayout(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.MATCH_PARENT);
        }
    });

    BottomSheetStatisticsExportBinding binding = DataBindingUtil.inflate(
            LayoutInflater.from(getContext()),
            R.layout.bottom_sheet_statistics_export,
            null,
            false
    );

    View contentView = binding.getRoot();
    dialog.setContentView(contentView);

    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
    CoordinatorLayout.Behavior behavior = params.getBehavior();

    if( behavior != null && behavior instanceof BottomSheetBehavior )
        ((BottomSheetBehavior) behavior).setBottomSheetCallback(bottomSheetBehaviorCallback);

    for (Export export : exports)
        binding.flexbox.addView(new ExportItemView(getContext(), export));
}

警告是因为我正在使用super方法。但是我应该怎么做呢?我是否应该将代码移到另一个函数(onCreateDialog()onResume() ...?)中,是否应该删除对 super 对象的调用?

有谁知道?

最佳答案



是的。如 DialogFragment documentation(BottomSheetDialogFragment的扩展名)所示,您应该使用onCreateView()设置对话框。

从此方法返回的View将设置为onCreateDialog()提供的对话框的内容 View 。可以从getDialog()内部使用onCreateView()方法对上述Dialog进行任何调整。
onCreateDialog()将用于替换默认的Dialog。在您的情况下,您可能不想这样做;考虑到这是BottomSheetDialogFragment用于用Dialog替换默认BottomSheetDialog的方法(实际上,这是BottomSheetDialogFragment覆盖的唯一方法)。

Here是我创建的用于替换支持库版本的BottomSheetDialogBottomSheetDialogFragment类(有关更多信息,请参见注释)。

关于android - BottomSheetDialogFragment设置对话框仅限于库组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47267301/

10-10 09:04