java 如何将 ArrayList 从 Activity 传递到 Fragment
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/38062292/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to pass an ArrayList from Activity to a Fragment
提问by Amr SubZero
What i'm trying to do is sending ArrayList<String>
from Activityto ListFragment
我想要做的是ArrayList<String>
从Activity发送到ListFragment
So i can use the Fragments in a TableLayout
所以我可以在一个 TableLayout
It's not necessary to use ListFragment, i can use any type of Fragments, 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);
}
I've searched a lot, but i didn't find anything useful, and this code above gives me Unfortunately app has stopped
我搜索了很多,但没有找到任何有用的东西,上面的代码给了我 Unfortunately app has stopped
So how can i achieve something like that?
那么我怎样才能实现这样的目标呢?
回答by Andre Classen
You are instantiating your fragment twice :D
您正在两次实例化您的片段:D
Just change u'r 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();
}
回答by Arslan Sohail
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();