如何在另一个类中访问(迭代?)一个ArrayList / Hashmap?

时间:2012-01-05 23:16:00

标签: android arraylist hashmap iteration android-activity

我在我的主类中定义了一个ArrayList,我从XML feed中加载数据并创建包含不同活动的各种标签:

static ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

我将地图条目放入HashMaps的ArrayList中的示例:

for (int i = 0; i < 10; i++) {      
  HashMap<String, String> map = new HashMap<String, String>();  
  Element e = (Element)nodes.item(i);
  map.put("id", XMLfunctions.getValue(e, "id"));
  map.put("lat", "Lat: " + XMLfunctions.getValue(e, "lat"));
  map.put("long", "Long: " + XMLfunctions.getValue(e, "long"));
  mylist.add(map);
}

第一个选项卡是ListViewActivity,我通过引用主类中的ArrayList成功地创建了列表: class.mylist 通过列表适配器:

ListAdapter adapter = new SimpleAdapter(
                      ListViewActivity.this,
                      main.mylist, R.layout.list,
                      new String[] { "id", "lat", "long" }, 
                      new int[] { R.id.item_id, R.id.item_lat, R.id.item_long });                   
setListAdapter(adapter);

我的第二个标签是MapView,我能够成功切换标签,在标签布局中显示地图以及平移和放大。缩放等。

我需要帮助的地方是了解如何访问主类中“mylist”ArrayList / Hashmap中的“lat”和“long”字符串(注意我声明了主类中的ArrayList / Hashmap,然后在所有活动中共享它,因为它是一个非常大的XML提要,我不想重新加载数据或在内存中有太多对象

我的目标是将这些纬度/经度坐标转换为GeoPoints并使用地图叠加显示它们;我已经能够使用硬编码到我的Map活动类中的固定GeoPoints来做到这一点。但是,正如我上面所写,我现在需要替换这些“固定的”GeoPoints,而是使用“mylist”ArrayList / Hashmap的内容。

我是编程Java / Android的新手(&lt; 1个月经验),所以我希望这一切都有意义吗?我希望有人能够解释/举例说明我如何访问数据......我已尝试实施各种措施,例如“迭代”,但它还没有工作。

2 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,那么您正在寻找一种迭代的方法ArrayList?如果是这样,这个例子应该让你开始:

Iterator itr = myList.iterator();
while (itr.hasNext()) {
  HashMap<String, String> map = (HashMap<String, String>) itr.next();
  String lat = (String) map.get("lat");
  String lon = (String) map.get("long");
  String id = (String) map.get("id");
  Log.d(TAG, "Lat is: " +lat);
  Log.d(TAG, "Lon is: " +lon);
  Log.d(TAG, "ID is: " +id);
 }

答案 1 :(得分:0)

你可以做几件事。您可以将Feed作为静态变量。如果它是静态的,您可以通过编写MyActivity.myList来从任何地方访问它。

此外,您可以通过意图传递XML字符串:

Intent i = new Intent(this, ActivityToLaunch.class);
i.putExtra("xml", xml);
startActivity(i);

然后使用:

检索它
String xml = getIntent().getExtras().getString("xml");

如果文件非常大,另一个想法是将xml文件保存到SD卡并将其加载到每个活动中。

完成这些后,你可以像这样迭代遍历ArrayList

for(HashMap<String,String> map: myList)

然后以几种方式遍历每个HashMap:

for(String s: map.keyset())

允许您通过键获取值,或者您可以像这样直接遍历值:

for(String s: map.values())