androd使用bundle在activity或者view之间传递数据,比如一个包含fragment的activity在创建fragment时,会用bundle传递信息以完成fragment的创建。
然而bundle所能接收的数据类型有限,不包括Map、List等集合类型,所以要传递这些类型就得另辟蹊径。
查找到bundle有方法bundle.putSerializable可以存储序列化对象,所以只需要将集合对象先封装在一个对象中然后传递,最终解封即可,步骤代码如下:
* 因为bundle无法传递Map但可以传递单个对象,所以建立此类来包装map */ public class BundleData implements Serializable{ private Map<String,NewsItem> newsItems; public Map<String,NewsItem> getNewsItems() { return newsItems; } public void setNewsItems(Map<String,NewsItem> newsItems) { this.newsItems = newsItems; } }
public static final String BUNDLE_DATA = "bundleData"; private BundleData bundleData;
bundle.putSerializable(BUNDLE_DATA, bundleData);
bundleData = (BundleData) getArguments().getSerializable(BUNDLE_DATA);