使用 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);
【讨论】:
this
和getApplicationContext()
有什么区别。我也试过ArrayList<String> 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);
但文件会自动关闭。
如果您在我的回复中应用代码,则数据是一个 ArrayListmealSummary = (String[]) data.toArray();
ArrayAdapter adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mealSummary);
将 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 中的小部件