如何在Tab布局中将数据从Activity传递到Fragement ..?

时间:2016-08-01 06:41:13

标签: android listview android-fragments interface fragment

大家好我需要如何以简单的方式将数据从活动传递到片段

我需要使用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;
}

3 个答案:

答案 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);
}