1

我想将 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

4 回答 4

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());

然后在搜索结果中,

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

感谢您的所有回答

于 2014-11-18T10:51:21.850 回答
0

NameValuePair既不是Parcelable也不是Serializable,所以你不能通过整个对象Fragment。您可以做的是将每个字符串放入捆绑包中并 ArrayList<NameValuePair>在“接收器”中构建Fragment

于 2014-09-29T09:13:20.700 回答
0

NameValuePair不实现Parcelable接口。你应该扩展BasicValueName和实现Parcelable

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

于 2014-09-29T09:16:28.727 回答
-1

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

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

Fragment之间的通信

您可能还想阅读为什么不建议在 Fragment 之间直接通信?

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

于 2014-09-29T10:07:46.457 回答