android - 如何将自定义按钮添加到 Material 日期范围选择器android?

标签 android material-components-android

如何向 Material 日期范围选择器添加自定义按钮?

我正在尝试获取对话框的 View ,以便可以以编程方式添加按钮,但我无法从选择器中获取任何 View 。

        MaterialDatePicker.Builder<Pair<Long,Long>> builder = MaterialDatePicker.Builder.dateRangePicker();
        MaterialDatePicker<Pair<Long,Long>> materialDatePicker = builder
            .setTitleText("Select Dates")
            .build();
        dateRangeTV.setOnClickListener(v -> {
            materialDatePicker.show(getSupportFragmentManager(), "DATE_PICKER");
            View root = materialDatePicker.requireView();
        });

但是我收到错误消息。

java.lang.IllegalStateException: Fragment MaterialDatePicker{e52ecfc} (40593b4f-a55a-4d6c-aa3b-2b778e721149 tag=DATE_PICKER) 未从 onCreateView() 返回 View ,或者在 onCreateView() 之前调用此 View 。

最佳答案

发生此错误的原因是 materialDatePicker.show() 是异步调用,并且 MaterialDatePicker (DialogFragment) 尚未创建,无法访问其 Root View 。为了避免此错误,您必须通过添加 DefaultLifecycleObserver 使用 materialDatePicker.getLifecycle() 监听 DialogFragment Lifecycle 并使用覆盖方法 void onStart(@NonNull LifecycleOwner Owner) 从那里访问 MaterialDatePicker Root View 。

将您的代码更改为如下所示:

MaterialDatePicker.Builder<Pair<Long,Long>> builder = MaterialDatePicker.Builder.dateRangePicker();
MaterialDatePicker<Pair<Long,Long>> materialDatePicker = builder
        .setTitleText("Select Dates")
        .build();
materialDatePicker.getLifecycle().addObserver(new DefaultLifecycleObserver()
{
    @Override
    public void onCreate(@NonNull LifecycleOwner owner) {}

    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        //in onStart of DialogFragment the View has been created so you can access the materialDatePicker.requireView()
        View root = materialDatePicker.requireView();
        //from root find the View you are interested to add your custom button
    }

    @Override
    public void onResume(@NonNull LifecycleOwner owner) {}

    @Override
    public void onDestroy(@NonNull LifecycleOwner owner) {
        //remove Lifecycle Observer
        materialDatePicker.getLifecycle().removeObserver(this);
    }
});
materialDatePicker.show(getSupportFragmentManager(), "DATE_PICKER");

关于android - 如何将自定义按钮添加到 Material 日期范围选择器android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70279280/

相关文章:

android - 无法在 Windows 10 上使用 Android USB 驱动程序

android - 交互式 ListView

android - 在 Android 中显示 FAB 上方的 snackbar

android - 调整 float 操作按钮的图标大小(fab)

android - 无法导入 android.support.design.internal.*

android - 应用程序 :cornerRadius doesn't work for MaterialButton

android - java.util.LinkedHashMap 无法转换为 DataList

android - 适用于 Android SDK 的 Eclipse 的正确版本

android - 如何将颜色从十六进制转换为 RGB

android - 添加 Material 依赖项时合并 list 错误