如何使用 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。
您的 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");
如何将 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。
您的 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");