I am storing some values in array list now i want to pass the same array list object to fragment from an activity. So how can i send the array list object from an activity and receive the same object in fragment.
4 Answers
Try this code in your activity, It is a code snippet from my working application.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
yourArrayList.add("test");
yourArrayList.add("test2")
Bundle bundle = new Bundle();
bundle.putStringArrayList("arrayList", yourArrayList);
yourFragment yourFragment = new yourFragment();
yourFragment.setArguments(bundle);
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.main_container, yourFragment);
fragmentTransaction.commit();
}
In your fragment you can access the value like this
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayList<String> values = getArguments().getStringArrayList("arrayList");
}
Comments
pass activity should follow this lines
Bundle bundle = new Bundle();
bundle.putStringArrayList("valuesArray", namesArray);
namesFragment myFragment = new namesFragment();
myFragment.setArguments(bundle);
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.main_container, myFragment);
fragmentTransaction.commit();
get Fragment inside follow this lines
ArrayList<ObjectName> arraylist = extras.getParcelableArrayList("valuesArray");
2 Comments
ArrayList<ObjectName> arraylist sure about this line.? will it work for T objects?You can do this by following the usual way of Fragment-Activity communication. That is:
1) Declare a public interface within your Fragment class.
2) Inside this interface declare a getter method for your list.
3) Make your respective Activity implement this interface.
4) Inside your Fragment, do this:
@Override
public void onAttach(Context context) {
super.onAttach(context);
YourInterfaceType activity = (YourInterfaceType) context;
List<> yourList = activity.getMyList();
}
To make it more clear:
Your activity will be as follows:
public class MyActivity extends Activity implements YourInterfaceType{
@Override
public void getMyList(){
return yourList;
}
}
Comments
just put your array with setargument in Actiivty and get Array getArgument in fragment.
Activity
Bundle bundle = new Bundle();
bundle.putStringArrayList("valuesArray", namesArray);
namesFragment myFragment = new namesFragment();
myFragment.setArguments(bundle);
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.main_container, myFragment);
fragmentTransaction.commit();
fragment
ArrayList<Model> values = getArguments().getStringArrayList("valuesArray");