How to pass custom object arraylist from activity to fragment with instance

3.9k views Asked by At

I am using viewpager and creating fragments and i want to pass the arraylist. So i have tried the below things:

MainActivity:

 private ArrayList<customers> mArrayList = null;

  ViewPagerAdapter adapter = new ViewPagerAdapter(MainActivity.this.getSupportFragmentManager());

  adapter.addFrag(NewCustomer.newInstance(mArrayList ), "NewCustomer");

Now in fragment class i am creating instance:

 public static final ArrayList<customers> data = new ArrayList<customers>();

 public static final NewCustomer newInstance(ArrayList<customers> mArrayList) {

        NewCustomer f = new NewCustomer();
        Bundle bdl = new Bundle(1);
        bdl.putParcelableArrayList(data, mArrayList);
        f.setArguments(bdl);
        return f;
    }

But this is not working. It is showing error on bdl.putParcelableArrayList I want to get arraylist and store into the local arraylist of that class.

How can i get the arraylist with my custom object ?

3

There are 3 answers

2
Mayur Raval On BEST ANSWER

Can you try ?

public static final NewCustomer newInstance(ArrayList<customers> mArrayList) {

        NewCustomer f = new NewCustomer();
        Bundle bdl = new Bundle(1);
        this.data = mArrayList; // assign its Value
        bdl.putParcelableArrayList(data, mArrayList);
        f.setArguments(bdl);
        return f;
    }

this.data = mArrayList will assign value to the current member variable of fragment. Now it can we be accessed in current fragment.

1
Hristo Stoyanov On

The first parameter you are passing is wrong. Check the definition:

putParcelableArrayList(String key, ArrayList<? extends Parcelable> value)

Define the key as following in your fragment:

public static final String KEY;

To get the arraylist as local variable in your fragment use following code:

@Override
public void onStart() {
    super.onStart();
    Bundle arguments = getArguments();
    ArrayList<customers> customer_list = arguments.getParcelable(KEY);
}
0
Saurabh Bhandari On

please check that your model class "NewCustomer" implements Parcelable.