【发布时间】:2018-08-19 10:28:44
【问题描述】:
对于片段,将 liveData 观察者放在 onActivityCreated 方法中是 advised。这适用于片段,但是当我将其应用于 dialogFragment 时,我收到以下错误:
java.lang.IllegalStateException:当 getView() 为 null 时,即 onCreateView() 之前或 onDestroyView() 之后,无法访问 Fragment View 的 LifecycleOwner。
从这个question我读到dialogFragment在创建时的生命周期是:
onAttach
onCreate
onCreateDialog
onCreateView
onActivityCreated
onStart
onResume
所以将观察者放在 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();
....
}
此 Code Pattern 在片段中可以正常工作,但在 dialogFragment 中无法正常工作。在那里我必须将生命周期所有者设置为“this”。
那么为什么我会收到错误消息?
【问题讨论】:
-
你解决了吗?
-
我用 'this' 作为生命周期所有者。
-
@KvdLingen 这是文档中提到的正确方法 (developer.android.com/guide/fragments/dialogs#lifecycle)