如何将ArrayList从Activity传递给片段

Amr*_*ero 1 java android arraylist android-fragments

我要做的是ArrayList<String>Activity发送到ListFragment

所以我可以使用片段 TableLayout

没有必要使用ListFragment,我可以使用任何类型的片段,但我正在尝试获得这个想法.

这是我的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();

}
Run Code Online (Sandbox Code Playgroud)

我的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);
}
Run Code Online (Sandbox Code Playgroud)

我搜索了很多,但我没有找到任何有用的东西,上面的代码给了我 Unfortunately app has stopped

那么我怎样才能实现这样的目标呢?

And*_*sen 8

您正在实例化您的片段两次:D

只需将您的代码更改为:

@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();
}
Run Code Online (Sandbox Code Playgroud)