Reputation: 1276
What I'm trying to do is send an ArrayList<String>
from an Activity to a ListFragment.
So I can use the Fragments in a TableLayout
.
It's not necessary to use a ListFragment
, I can use any type of Fragment
, but I'm trying to get the idea.
Here's my MainActivity:
FragmentTransaction fragmentTransaction;
ArrayList<String> namesArray = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
namesArray.add("Android");
namesArray.add("Iphone");
namesArray.add("Windows Phone");
Bundle bundle = new Bundle();
bundle.putStringArrayList("valuesArray", namesArray);
namesFragment myFragment = new namesFragment();
myFragment.setArguments(bundle);
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.main_container, new namesFragment());
fragmentTransaction.commit();
}
My ListFragment:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayList<String> values = getArguments().getStringArrayList("valuesArray");
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
This code above gives me:
Unfortunately app has stopped.
So how can I achieve something like that?
Upvotes: 1
Views: 12040
Reputation: 4017
You are instantiating your Fragment
twice.
Just change your code to:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
namesArray.add("Android");
namesArray.add("Iphone");
namesArray.add("Windows Phone");
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();
}
Upvotes: 9
Reputation: 1713
Not the answer but you can avoid creating a Fragment Transaction object by replacing last three lines with this
getSupportFragmentManager()
.beginTransaction()
.add(R.id.main_container, new namesFragment())
.commit();
Upvotes: -2