大家好我需要如何以简单的方式将数据从活动传递到片段
我需要使用Interface
来实现以下是我数据类型的示例。
ArrayList<PreviewData> finaldata = new ArrayList<PreviewData>();
for(int i=0;i<10;i++) {
PreviewData tempdata = new PreviewData("listname"+i+"","dsdsdsd","sdsdsdd");
finaldata.add(tempdata);
}
我使用虚拟值来解释代码,但我的案例值来自web api。
现在问题是我有两个标签的活动。 tab1 或 tab2
当活动开始时,它会从服务器上获取数据并将其存储在自定义数组列表中。 的例如。最终数据在我的情况下
现在位于 tab1 这里是一个列表视图,从 finaldata
获取列表这是onCreateView Of片段的代码。 我需要将主要活动的最终数据值传递给片段 adapterdata 列表。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mydbhelper = new DBhelper(getContext());
view = inflater.inflate(R.layout.view_all_campaign, container, false);
ArrayList<PreviewData> adapterdata= new ArrayList<PreviewData>();
listView = (ListView) view.findViewById(R.id.campaign_list_view);
adapter = new MyCustomAdapter(getContext(), R.layout.layout_contact_row, adapterdata);
listView.setAdapter(adapter);
return view;
}
答案 0 :(得分:1)
创建一个Constant类,如下所示
public Constant{
public static ArrayList<Previewdata> data=null;
}
然后将数组值分配给常量类,如下所示
ArrayList<PreviewData> finaldata = new ArrayList<PreviewData>();
for(int i=0;i<10;i++) {
PreviewData tempdata = new PreviewData("listname"+i+"","dsdsdsd","sdsdsdd");
finaldata.add(tempdata);
}
Constant.data=finaldata;
从片段中回复
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mydbhelper = new DBhelper(getContext());
view = inflater.inflate(R.layout.view_all_campaign, container, false);
ArrayList<PreviewData> adapterdata= Constant.data;
listView = (ListView) view.findViewById(R.id.campaign_list_view);
adapter = new MyCustomAdapter(getContext(), R.layout.layout_contact_row, adapterdata);
listView.setAdapter(adapter);
return view;
}
答案 1 :(得分:1)
请在调用片段时将此代码添加到您的活动中:
Bundle bundle = new Bundle();
ArrayList<PreviewData> finaldata = new ArrayList<PreviewData>();
bundle.putSerializable("myArray",(Serializable)finaldata);
// set Arguments
Fragmentclass obj = new Fragmentclass();
obj.setArguments(bundle);
但首先要使您的 PreviewData 如下所示(例如名称):
public class PreviewData implements Serializable{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后在您的片段中获取您的对象,如:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mydbhelper = new DBhelper(getContext());
view = inflater.inflate(R.layout.view_all_campaign, container, false);
ArrayList<PreviewData> adapterdata= new ArrayList<PreviewData>();
adapterdata = getArguments().getStringArrayList("myArray");
listView = (ListView) view.findViewById(R.id.campaign_list_view);
adapter = new MyCustomAdapter(getContext(), R.layout.layout_contact_row, adapterdata);
listView.setAdapter(adapter);
return view;
}
答案 2 :(得分:0)
活动:
public ArrayList<PreviewData> getAdapterData {
return finaldata;
}
片段:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayList<PreviewData> adapterdata = ((YourActivity) getActivity()).getAdapterData();
adapter = new MyCustomAdapter(getContext(), R.layout.layout_contact_row, adapterdata);
listView.setAdapter(adapter);
}