如何向 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/