这个星期做了一个-个人信息查询功能,在一个activity里面用了4个fragment,用到了TabLayout和ViewPager,这样可以进行滑动翻看。但我还需要每个fragment接收参数,然后向后台传递不同的参数,所以在接收参数时候遇到些问题。我在这个activity页面收到了上一个页面的参数,
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
但是在向四个fragment传递时懵逼了,我本来还想继续用bunle传递。因为可以这么用,从activity到fragment传参,
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("aa", a.getText().toString());
intent.setClass(**.this,**.class);
intent.putExtras(bundle);
startActivity(intent);
接收方:
Bundle bundle = new Bundle();
bundle = this.getIntent().getExtras();
String aa = bunle.getString("aa");
但是这样只能传递简单的参数,不能传递复杂的组合,例如HashMap,所以我们可以自己写一个类,可以让它干的复杂一点。
public class SerializableMap implements Serializable {
private HashMap<String,Object> para;
public SerializableMap(HashMap para) {
this.para=para;
}
public HashMap<String, Object> getMap() {
return para;
}
public void setMap(HashMap<String, Object> para) {
this.para = para;
}
}
这样我们可以获取前面传来的hashmap——->
SerializableMap serializableMap=(SerializableMap)bundle.get("map");
HashMap para=serializableMap.getMap();
然后再向每个fragment传参时这么写,
Fragment1 fragment1;
fragment1=Fragment1.newInstance(para);
fragment1.setArguments(bundle);
Fragment2 fragment2;
fragment2=Fragment2.newInstance(para);
fragment2.setArguments(bundle);
需要在每个fragment里写一个—->
public static Fragment1 newInstance(HashMap para) {
Fragment1 fragment = new SBPersonInfo();
SerializableMap serializableMap=new SerializableMap(para);
Bundle bundle = new Bundle();
bundle.putSerializable("paramap",serializableMap);
fragment.setArguments(bundle);
return fragment;
}
newInstance()作用以后再介绍,不过fragment确实需要,方便页面复用和构造。在onCreateView里写
Bundle bundle = getArguments();
SerializableMap serializableMap =(SerializableMap)bundle.getSerializable("paramap");
HashMap para=serializableMap.getMap();
这样我就可以在每个不同fragment页面取到不同的参数了。这个是我刚刚找到的解决方法,结合了intent和bunle在多个activity和fragment之间参数传递,有可能有些重复或者不规范的地方,以后慢慢会慢慢改进的。