使用 ListView 从另一个 Activity 打印 ArrayList

Posted

技术标签:

【中文标题】使用 ListView 从另一个 Activity 打印 ArrayList【英文标题】:Print ArrayList from another Activity using ListView 【发布时间】:2017-01-07 02:56:22 【问题描述】:

我正在尝试使用 ListView 在我的另一个 Activity 中打印来自 ArrayList 的字符串。我在 intent 变量中传递了一个键和值。使用这个。

主活动

ArrayList<String> arrayList = new ArrayList<String>();
Intent intent = new Intent(getApplicationContext(), ViewCart.class);

mealOneIncrement++;
quantityOne.setText(Integer.toString(mealOneIncrement));
mealOneCost = mealOneIncrement * mealOnePrice;
price.setText(Double.toString(mealOneCost));

String mealOneSummayName = name.toString();
String mealOneSummaryDescription = description.toString();
String mealOneSummaryQuantity = String.valueOf(mealOneIncrement);
String mealOneSummaryCost = String.valueOf(mealOneCost);

arrayList.add(mealOneSummayName);
arrayList.add(mealOneSummaryDescription);
arrayList.add(mealOneSummaryQuantity);
arrayList.add(mealOneSummaryCost);

intent.putExtra("data", arrayList);

正如您在此处看到的,我将 arrayList 变量作为值传递给另一个 Activity。

第二个活动

ListView listView = (ListView) findViewById(R.id.listView);

String[] mealSummary = ;
ArrayAdapter adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mealSummary);
Bundle bundle = getIntent().getExtras();

String data = bundle.getString("data");
listView.setAdapter(adapter);

我在这部分有点困惑String data = bundle.getString("data"); 我不确定我是否将正确的变量传递给我的 ListView 所以我可以显示arrayList我的 ListView 中的变量。我做错了吗?任何帮助将不胜感激:)

【问题讨论】:

你在 ArrayAdapter 构造函数中有饭菜。您需要传递一个数据集。 【参考方案1】:

您的代码存在一些问题:

intent.putExtra("data", arrayList);

你在包里面放了一个字符串的arrayList,然后

String data = bundle.getString("data");

你得到的只是一个字符串。您需要使用bundle.getStringArrayList("data")

ArrayList<String> data = bundle.getStringArrayList("data")

另外(与您的问题无关),我建议使用

Intent intent = new Intent(this, ViewCart.class);

而不是

Intent intent = new Intent(getApplicationContext(), ViewCart.class);

【讨论】:

thisgetApplicationContext() 有什么区别。我也试过ArrayList&lt;String&gt; data = bundle.getStringArrayList("data"),但在我的listView.setAdapter(adapter);data 变量从未使用过,它不会在我的 listView 上打印任何内容。 @Francisunoxx ***.com/questions/7298731/…。 this 指的是 Activity 上下文,因为 Activity 扩展了 Context developer.android.com/reference/android/app/Activity.html。您需要适配器的数据集 需要使用适配器中的数据,否则适配器为空。 @MatiasElorriaga 我投射了data 变量。 listView.setAdapter((ListAdapter) data); 但文件会自动关闭。 如果您在我的回复中应用代码,则数据是一个 ArrayList.. 您不能将其转换为 ListAdapter.. 您需要使用该数据创建一个适配器。 mealSummary = (String[]) data.toArray();ArrayAdapter adapter = new ArrayAdapter&lt;String&gt;(this,android.R.layout.simple_list_item_1, mealSummary);【参考方案2】:

将 Arraylist 作为 putStringArrayListExtra 传递,

    Intent intent = new Intent(this, ViewCart.class);
    intent.putStringArrayListExtra("data", arrayList);
    startActivity(intent);

使用 getStringArrayListExtra 获取您的 ArrayList,

    arrayList = getIntent().getStringArrayListExtra("data");

【讨论】:

【参考方案3】:

你可以稍微修改一下。

在你的 secondActivity 中获取类似

的数据
ArrayList<String> data = getIntent().getSerializableExtra("data");

现在您在 arrayList 中获得了数据。如果您希望将此数据添加到mealSummary 然后使用,

mealSummary = (String[]) data.toArray();

别忘了致电adapter.notifyDataSetChanged()

【讨论】:

以上是关于使用 ListView 从另一个 Activity 打印 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试使用 MessagingCenter 从另一个页面填充它来通信两个类时,ListView 没有填满

从另一个 ViewModel 添加/删除记录时,ListView 不会更新?

如何从另一个 Fragment 更新一个 Fragment 的 ListView?

从另一个 Activity 访问一个 Activity 中的小部件

从另一个 Activity 返回的错误 requestCode onActivityResult

Xamarin MVVM 从另一个页面删除 Listview 项目