![](/img/trans.png)
[英]How to Pass ArrayList from Activity to Fragment in Android
[英]How to pass an ArrayList from Activity to a Fragment
我想要做的是將ArrayList<String>
從Activity發送到ListFragment 。
所以我可以在TableLayout
使用 Fragments 。
沒有必要使用ListFragment
,我可以使用任何類型的Fragment
,但我正在嘗試了解這個想法。
這是我的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();
}
我的列表片段:
@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);
}
上面的這段代碼給了我:
不幸的是應用程序已停止。
那么我怎樣才能實現這樣的目標呢?
您正在實例化您的Fragment
兩次。
只需將您的代碼更改為:
@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();
}
不是答案,但您可以通過用此替換最后三行來避免創建 Fragment Transaction 對象
getSupportFragmentManager()
.beginTransaction()
.add(R.id.main_container, new namesFragment())
.commit();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.