【问题标题】:How to pass an ArrayList from Activity to a Fragment如何将 ArrayList 从 Activity 传递到 Fragment
【发布时间】:2016-06-27 20:02:02
【问题描述】:

我正在尝试将ArrayList<String>Activity 发送到 ListFragment

所以我可以在TableLayout 中使用片段。

没有必要使用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();

}

我的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);
}

上面的代码给了我:

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

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

【问题讨论】:

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

标签: java android android-fragments arraylist


【解决方案1】:

您正在实例化您的 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();
}

【讨论】:

    【解决方案2】:

    不是答案,但您可以通过用此替换最后三行来避免创建 Fragment Transaction 对象

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多