我正在尝试使LiveData Observer正常工作,并且一切正常,但是一周后,将片段与实时数据连接到我的活动时,我的应用程序一直崩溃。该片段非常简单,它具有一个RecyclerView,它在网格中显示Bloggers
的列表。 ViewModel如下:
class SimpleBloggersViewModel : ViewModel() {
var bloggers: MutableLiveData<List<Blogger>> = MutableLiveData()
}
然后使用以下代码在片段中对其进行初始化:
private val viewModel: SimpleBloggersViewModel by lazy {
ViewModelProvider(this).get(SimpleBloggersViewModel::class.java)
}
导致崩溃的代码如下:
override fun onAttach(context: Context) {
super.onAttach(context)
try {
viewModel.bloggers.observe(viewLifecycleOwner, Observer { changeObserver })
} catch (e: IllegalStateException) {
Log.e(TAG, "onAttach: Failed to attach BloggersFragment.", e)
}
}
在没有{/ {1}}方法的try / catch的情况下,我得到了以下神秘异常(以及应用程序崩溃)
onAttach
添加了上面看到的try / catch块之后,该异常还提供了一些更多信息,但是我仍然不知道是什么原因引起的。
Process: com.mydomain.appname, PID: 31393
java.lang.IllegalStateException: Already attached
at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:3000)
at androidx.fragment.app.Fragment.performAttach(Fragment.java:2622)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1291)
at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1264)
at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1147)
at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:120)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2369)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2327)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2230)
at androidx.fragment.app.FragmentManager$3.run(FragmentManager.java:414)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)
请注意,在执行任何其他操作之前,我对所有重写方法都调用了super,因此第二个异常仍然无法帮助我找出错误。任何帮助是极大的赞赏。谢谢您的宝贵时间。