如何在不自定义Place类的情况下传递ArrayList<Place>到另一个Activity?
解决Google Place类跨Activity传递的问题
嘿,这个坑我之前踩过!Google Places SDK里的Place类其实已经实现了Parcelable接口——这才是Android跨组件传递对象的正确打开方式,而你用的Serializable刚好是它不支持的,这就是应用崩溃的原因。完全不用自定义Place类,按下面的方法改代码就行:
第一步:在MainActivity中传递Place列表
把原来依赖Serializable的传递方式,换成Parcelable对应的方法,直接用putParcelableArrayListExtra就行:
private ArrayList<Place> nearbyPlaces; button_list.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(nearbyPlaces.size() > 0){ Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 用Parcelable的方式传递列表 intent.putParcelableArrayListExtra("KEY_NEARBY_PLACES", nearbyPlaces); startActivity(intent); } } });
第二步:在第二个Activity中接收列表
在目标Activity的onCreate方法里,用getParcelableArrayListExtra获取传递过来的列表:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // 接收Place列表 ArrayList<Place> receivedNearbyPlaces = getIntent().getParcelableArrayListExtra("KEY_NEARBY_PLACES"); // 接下来就可以正常使用这个列表做逻辑处理了 if(receivedNearbyPlaces != null && !receivedNearbyPlaces.isEmpty()){ // 比如遍历列表展示数据 for(Place place : receivedNearbyPlaces){ String placeName = place.getName(); // ... 其他操作 } } }
补充说明
- 为什么不用Serializable?因为Google官方的
Place类并没有实现Serializable接口,但它实现了Android原生的Parcelable,这也是Android推荐的对象传递方案,效率比Serializable更高。 - 注意确认你导入的
Place类是com.google.android.libraries.places.api.model.Place,别导错其他包的类哦。
内容的提问来源于stack exchange,提问作者David Lafrenière
相关产品推荐
相关产品推荐

