如何在android </namevaluepair>中将ArrayList <namevaluepair>从一个片段发送到另一个片段

时间:2014-09-29 09:10:17

标签: android android-fragments android-fragmentactivity android-bundle

我想将NameValuePair的ArrayList从一个片段传递到另一个片段,这是我的代码

    param = new ArrayList<NameValuePair>();
    param.add(new BasicNameValuePair("member_id",mem_id));
    param.add(new BasicNameValuePair("country_id",countryid+""));
     Bundle urlbundle = new Bundle();

    urlbundle.putParcelableArrayList("params",(ArrayList<? extends Parcelable>) param);         
    result=new SearchResults();
    result.setArguments(urlbundle);

我试图以这种方式获取数据

    Bundle urlbundle=this.getArguments();
    param=urlbundle.getParcelableArrayList("params");

但它给出了错误 绑定不匹配:类型为Bundle的泛型方法getParcelableArrayList(String)不适用于参数(String)。推断类型NameValuePair不是有界参数

的有效替代

任何人都可以帮我解决这个问题或如何正确解决这个问题?

4 个答案:

答案 0 :(得分:1)

在阅读完所有答案之后,最后我想分享一下我是如何解决这个问题的。 即,使用构造函数

param = new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("member_id",mem_id));
param.add(new BasicNameValuePair("country_id",countryid+"")); 
result=new SearchResults(param);
Util.replaceFragment(result, (NavDrawer) getActivity());

然后在SearchResults中,

ArrayList<NameValuePair> param;    
public SearchResults(ArrayList<NameValuePair> list) {
        this.param = list;
    }

感谢您的所有答案

答案 1 :(得分:0)

NameValuePair既不是Parcelable也不是Serializable,因此您无法通过Fragment传递整个对象。您可以做的是将每个字符串放入捆绑包中,并在&#34;接收器&#34;中构建ArrayList<NameValuePair>Fragment

答案 2 :(得分:0)

NameValuePair未实现Parcelable接口。您应该扩展BasicValueName并实施Parcelable

其他选项是与Activity通信并在Activity中保存数据,并在加载新的fragmen时检索它。

答案 3 :(得分:-1)

首先,碎片不应该在它们之间进行通信。相反,他们应该通过托管它们的活动实现的回调方法进行通信。同样,您不能在片段实例的生命周期内多次调用setArguments(urlbundle);

因此,您应该首先为Fragment1创建一个回调接口,父活动应该实现该接口。你的第二个例子,比如说ResultFragment,应该有一个接受ArrayList作为参数的方法,并负责在接口上显示它。 看看这个问题的接受答案,看看你能轻松实现它。

Communication between Fragments

您可能还想阅读Why direct communication between fragments is not recommended?

或者,如果您的片段是在两个不同的活动中加载的,那么您唯一的选择可能是扩展Application类或使用可以保存您想要在活动之间共享的ArrayList的静态引用的单例类。