Kvd*_*gen 15 android android-livedata
对于片段,建议将liveData观察者放在onActivityCreated方法中.这适用于片段,但当我将其应用于dialogFragment时,我收到以下错误:
java.lang.IllegalStateException:当getView()为null时,即在onCreateView()之前或onDestroyView()之后,无法访问Fragment View的LifecycleOwner.
从这个问题我在创建时读取了dialogFragment的生命周期:
onAttach
onCreate
onCreateDialog
onCreateView
onActivityCreated
onStart
onResume
Run Code Online (Sandbox Code Playgroud)
因此,将观察者放在onActivityCreated中应该没有问题,因为它在onCreateView或onCreateDialog之后.我使用后者,因为我使用自己的布局的Alertdialog.
这是我的观察者的代码:
mScheduleViewModel.getTeachers().observe(getViewLifecycleOwner(), new Observer<List<String>>() {
@Override
public void onChanged(@Nullable List<String> strings) {
mStringList = strings;
aclInputvalue.setThreshold(2);
aclAdapter.setList(strings);
aclAdapter.notifyDataSetChanged();
....
}
Run Code Online (Sandbox Code Playgroud)
此代码模式在片段中正常工作,但在dialogFragment中不起作用.我必须将lifecycleOwner设置为'this'.
那么为什么我会收到错误?
当您通过执行以下操作覆盖时,您可以ViewModels在 a中使用:DialogFragmentonCreateDialog
onCreateDialog,将对其的引用作为变量存储在DialogFragment.onCreateView并简单地返回您保存的自定义视图。onDestroyView完全像这样将视图设置为 null (否则 Leak Canary 报告内存泄漏) override fun onDestroyView() {
myView = null
super.onDestroyView()
}
Run Code Online (Sandbox Code Playgroud)
然后,对话框的行为更像一个普通的片段,您可以观察您的ViewModelin onCreateView,onViewCreated或者随意观察onActivityCreated。
| 归档时间: |
|
| 查看次数: |
4182 次 |
| 最近记录: |