如何使用 Intent 传递实时数据

How to pass live data with Intent

如何将 LiveData 传递给另一个 Activity?

我正在尝试将 LiveData 对象传递到使用 ViewPager 2 一次显示一个对象的新 Activity。

这是 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);

寻呼机Activity

    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> 传递给新的 activity。

如果您想查看完整代码,请点击 link 到 git。

https://github.com/Shawn-Nichol/Wrestlers

您的 getWrestlersList() 方法 returns 包裹您的 List<WrestlersEntity> 的 LiveData。您想要直接传递给 Bundle 的是 List<WrestlersEntity>,但包装在 List 的序列化实现中。这就是为什么下面的代码将 LiveData 的值包装在 ArrayList 中的原因。

因此,您可以这样做:

bundle.putSerializable("Value", new ArrayList<>(mViewModel.getWrestlersList().getValue()));

然后从 Bundle 中读回:

List<WrestlersEntity> wrestlers = (List<WrestlersEntity>)bundle.getSerializable("Value");