【发布时间】:2019-09-08 00:00:41
【问题描述】:
如何将 LiveData 与 Intent 传递给另一个 Activity?
我正在尝试将 LiveData 对象传递到一个新的 Activity 中,该 Activity 使用 ViewPager 2 一次显示一个对象。
这是 ViewModel 中的实时数据
private LiveData<List<WrestlersEntity>> mWrestlersList;
public LiveData<List<WrestlersEntity>> getWrestlersList() {
return mWrestlersList;
}
片段传递实时数据。
adapter.setOnItemClickListener(wrestler -> {
Bundle bundle = new Bundle();
bundle.putSerializable("Value", (Serializable)mViewModel.getWrestlersList());
Intent addEditIntent = new Intent(getActivity(), AddEditWrestlerActivity.class);
addEditIntent.putExtras(bundle);
startActivityForResult(addEditIntent);
寻呼机活动
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
List<WrestlersEntity> wrestler (List<WrestlersEntity>)bundle.getSerializable("Value");
我收到以下错误。
java.lang.ClassCastException: androidx.room.RoomTrackingLiveData cannot be cast to java.io.Serializable
如果您不能将实时数据转换为可序列化,我还有哪些其他选项可以将 LiveData> 传递给新活动。
如果你想查看完整的代码,这里是 git 的链接。
【问题讨论】:
-
复制 LiveData 中的内容,将其放入 Bundle 中,然后在 Intent 中传递。
-
@MichaelKrause,你能给我举个例子吗?我以为我已经在我的片段中这样做了。
-
@MichaelKrause 你为什么删除你的答案,我只是在尝试?
-
您的 getWrestlersList() 返回一个 LiveData,但是您要传递给捆绑包的是 LiveData 内的 List
并且从您到目前为止发布的代码中并不明显如何得到。当我能准确回答您的问题时,我很乐意取消删除。 -
如果有帮助,我可以包含 GIT