将arrayList从一个片段传递到另一个片段

时间:2014-07-09 06:07:34

标签: android android-fragments

我想将一个Arraylist(SearchModl是一个类)从一个片段传递给另一个片段。我正在使用Bundle来执行此操作。但是当我在其他片段中获取包时,我将获得空值

SearchModel

public class SearchModel implements Serializable {

    private String code,category, minExp, maxExp, postedOn, counts, applied, position, desc, type, hour, status, expiryDate, address, gender, religion, summary, requestId, requestorId;

    public SearchModel(String code,String category, String minExp, String maxExp, String postedOn, String counts, String applied, String position, String desc, String type, String hour, String status, String expiryDate, String address, String gender, String religion, String summary, String requestId, String requestorId) {
        this.code=code;
        this.category = category;
        this.minExp = minExp;
        this.maxExp = maxExp;
        this.postedOn = postedOn;
        this.counts = counts;
        this.applied = applied;
        this.position = position;
        this.desc = desc;
        this.type = type;
        this.hour = hour;
        this.status = status;
        this.expiryDate = expiryDate;
        this.address = address;
        this.gender = gender;
        this.religion = religion;
        this.summary=summary;
        this.requestId = requestId;
        this.requestorId = requestorId;
    } 

片段A

for (int i = 0; i < tableArray.length(); i++) {
                                        JSONObject table = tableArray.getJSONObject(i);
                                        data = new SearchModel(table.getString("Job_Code"), table.getString("Job_Category"), table.getString("Min_Exp"), table.getString("Max_Exp"), table.getString("Posted_On"), table.getString("Candidate_Counts"), table.getString("Applications"), table.getString("No_Of_Pos"), table.getString("Job_Desc"), table.getString("Job_Type"), table.getString("Job_Hours"), table.getString("Job_Status"), table.getString("Job_Exp_Date"), table.getString("Address"), table.getString("Gender_Name"), table.getString("Religion_Name"), table.getString("Exp_Summary"), table.getString("IJob_Request_ID"), table.getString("Requestor_Name"));
                                        values.add(data);

                                    }

//                                    getArrayList.getArray(values);


                                    bundle.putSerializable("array", (java.io.Serializable) values);

                                }
                            } catch (JSONException e1) {
                                e1.printStackTrace();
                            }
                        }
                        CommonFunctions.showProgress(getActivity(), "Please Wait...", false);
                        fragmentTransaction = getFragmentManager().beginTransaction();
                        SearchJobList searchJobList = new SearchJobList();
                        searchJobList.setArguments(bundle);
                        fragmentTransaction.replace(R.id.header_container, searchJobList, "searchJob").commit();
                    }
                }); 

第二片段

public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        data = new ArrayList<SearchModel>();
        Bundle bundle = getArguments();
        data = (List<SearchModel>) bundle.getSerializable("array");
        getArrayList = new GetArrayList() {
            @Override
            public void getArray(List<SearchModel> listValues) {
                data = listValues;
                jobAdapter = new SearchJobAdapter(getActivity(), data);
                setListAdapter(jobAdapter);
            }
        };

    } 

2 个答案:

答案 0 :(得分:1)

您可以简单地将ArrayList保存在活动中,两个碎片都可以使用它。

动态地,您在片段中创建公共方法,并在创建片段后,通过setter传递List。

 YourActivity extends Activity {

   void createFragment(){
        YourFragment yourFragment = Fragment.getInstance();
        yourFragment.setList(models);
  }

}

YourFragment extends Fragment {
  private List<SearchModel> models; 

  public void setList(List<SearchModel> models){
        models = models;
  }
}

静态地,不是最好的解决方案:

YourActivity extends Activity {
    static ArrayList<SearchModel> models;


}

YourFragment extends Fragment {

  public void doSomething(){
        List<SearchModel> model = YourActivity.models;
  }
}

实现PArcelable是最好的解决方案:

http://developer.android.com/reference/android/os/Parcelable.html 这里有一个解决方案:Android ArrayList<MyObject> pass as parcelable

答案 1 :(得分:0)

1.实现单例类作为传递对象的示例。 (希望你知道什么是单身人士,我没有,请加上评论告诉我。

class ExampleClass {
    private ExampleClass () {}

    static ExampleClass obj = nil;
    public ExampleClass instance() {
         if (obj == nil) obj = new ExampleClass ();
         return obj;
    }

    public ArrayList<SearchModel> cache;
 }

2.在from活动中,

ExampleClass .instance().cache = Cus_Obje_arraylist;

3.然后在to活动中,您可以从桥类中获取它。

ArrayList<SearchModel> Cus_Obje_arraylist = ExampleClass.instance().cache;
相关问题