我想将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不是有界参数
的有效替代任何人都可以帮我解决这个问题或如何正确解决这个问题?
答案 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的静态引用的单例类。