Java 如何将ArrayList从活动传递到片段

Java 如何将ArrayList从活动传递到片段,java,android,android-fragments,arraylist,Java,Android,Android Fragments,Arraylist,我试图做的是将数组列表从活动发送到列表片段 因此,我可以在表格布局中使用片段 没有必要使用列表片段,我可以使用任何类型的片段,但我正在尝试了解这个想法 这是我的主要活动: FragmentTransaction fragmentTransaction; ArrayList<String> namesArray = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState

我试图做的是将
数组列表从活动发送到列表片段

因此,我可以在
表格布局中使用片段

没有必要使用
列表片段
,我可以使用任何类型的
片段
,但我正在尝试了解这个想法

这是我的主要活动:

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);
}
FragmentTransaction FragmentTransaction;
ArrayList namesArray=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
namesArray.add(“安卓”);
namesArray.add(“Iphone”);
namesArray.add(“Windows Phone”);
Bundle=新Bundle();
bundle.putStringArrayList(“valuesArray”,namesArray);
namesFragment myFragment=新的namesFragment();
setArguments(bundle);
fragmentTransaction=getSupportFragmentManager().beginTransaction();
添加(R.id.main_容器,新名称片段());
fragmentTransaction.commit();
}
我的列表片段

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);
}
@覆盖
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
ArrayList values=getArguments().getStringArrayList(“valuesArray”);
ArrayAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple\u list\u item\u 1,值);
setListAdapter(适配器);
}
上面的代码给了我:

不幸的是,应用程序已停止


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

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

只需将代码更改为:

@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();
}

您正在实例化
片段两次

只需将代码更改为:

@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();
}

答案不是这样,但您可以通过将最后三行替换为以下内容来避免创建片段事务对象

getSupportFragmentManager()
.beginTransaction()
.add(R.id.main_container, new namesFragment())
.commit();

答案不是这样,但您可以通过将最后三行替换为以下内容来避免创建片段事务对象

getSupportFragmentManager()
.beginTransaction()
.add(R.id.main_container, new namesFragment())
.commit();

发布logcat错误请正如Juan所提到的,当你遇到这样的崩溃时,你应该始终发布你的logcat错误消息,这样我们就可以更容易地找到导致崩溃的原因。此外,您提到“以及如何将片段中的ArrayList显示为ListView”-这应该作为一个单独的问题发布。发布logcat错误请正如Juan所提到的,当您遇到这样的崩溃时,您应该始终发布logcat错误消息,以便我们更容易地找出导致崩溃的原因。另外,您提到“以及如何将片段中的ArrayList显示为ListView”-这应该作为一个单独的问题发布。