最近在做项目中有个需求就是viewpager嵌套fragment,写一个搜索的界面,然后外部的activity 动态传值给里面的fragment,里面用传进来的value值去搜索展示数据,遇到的 问题就是我for循环创建了4个fragment,然后在activity中写了个接口,fragment实现接口接收值,但是4个fragment只有最后一个接收到传过来的值了,其他的都为null,然后就一直不知道问题出在哪里,最后解决了,好了直接上代
1.在activity中循环创建fragment,并绑定viewpager
/**
* 循环创建fragment,并绑定viewpager
*/
private void initVp() {
for (int i = 0; i < mTitles.length; i++) {
SearchFragment searchFragment = SearchFragment.getInstance(i);
stringValueList.add(searchFragment);//接口的数组
fragmentList.add(searchFragment);//fragment的数组
}
searchResultSt.setViewPager(searchResultVp, mTitles, this, (ArrayList<Fragment>) fragmentList);
isCreate = true;
}
2.在activity中写接口并在需要传值的时候调用接口传值给fragment
/**
* activity传值给fragment的接口
*/
public interface getStringValue {
void getString(String value);
}
//传值给fragment然后请求数据并展示
for (int i = 0; i < stringValueList.size(); i++) {
stringValueList.get(i).getString(mSearchValue);
}
3.fragment实现接口接收数据
/**
* 实现activity动态传值接口
*/
@Override
public void getString(String value) {
mValue = value;
if (isCreate) {
LeanCloudApi.searchAllFiledData(mValue, mPosition, 0, this);
}
好了以上就是我改过后的正确的代码,那么问题出在哪里呢?
解答出现只有最后一个fragment接收到传值的问题原因:原因就是在于我循环是创建了四个fragment,但是我只在activity中写了一个接口,因为activity和fragment是一对一的,现在是一对四,所以就会出现只有最后一个fragment收到了传来的值,解决方法就是在循环创建fragment的时候也一起把接口循环了,然后在使用接口传值的时候循环接口list使用,这样保证了每一个fragment就会对应一个接口,然后在fragment收到的值就会每一个都接收到了,简单的说就是activity和fragment是一对一的,有几个fragment就有几个接口。