[英]How to pass an ArrayList from Activity to a Fragment
What I'm trying to do is send an ArrayList<String>
from an Activity to a ListFragment .我想要做的是将ArrayList<String>
从Activity发送到ListFragment 。
So I can use the Fragments in a TableLayout
.所以我可以在TableLayout
使用 Fragments 。
It's not necessary to use a ListFragment
, I can use any type of Fragment
, but I'm trying to get the idea.没有必要使用ListFragment
,我可以使用任何类型的Fragment
,但我正在尝试了解这个想法。
Here's my MainActivity :这是我的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?那么我怎样才能实现这样的目标呢?
You are instantiating your Fragment
twice.您正在实例化您的Fragment
两次。
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();
}
Not the answer but you can avoid creating a Fragment Transaction object by replacing last three lines with this不是答案,但您可以通过用此替换最后三行来避免创建 Fragment Transaction 对象
getSupportFragmentManager()
.beginTransaction()
.add(R.id.main_container, new namesFragment())
.commit();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.