2012-01-05 77 views
1

我在哪里,我从XML提要加载数据,并与不同的活动创造各种选项卡我的主类中定义一个ArrayList如何在另一个类中访问(迭代?)ArrayList/Hashmap?在这里我把地图进入包含HashMap的ArrayList中的</p> <pre><code>static ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); </code></pre> <p>例:

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的,我能够成功切换标签,显示标签布局中的地图和平移&变焦等

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

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

我是新的(< 1个月的经验)编程Java/Android,所以我希望这一切都有道理?我希望有人能够解释/举例说明我如何访问数据......我尝试过实施各种措施,例如'迭代',但它还没有工作。

回答

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()) 

这将让你得到键的值,或者你可以直接迭代这些值:

+0

乔鲁你好,是的,我已经宣布“MYLIST” ArrayList的一个静态变量如你所说 - 而不是通过一个Intent传递。有了上面的建议,我现在已经能够成功遍历ArrayList并在Logcat中的hashmap对象中显示所有数据。但是,检索这些值后,我仍不清楚如何访问特定条目,如id,lat或long? (对不起,如果我的问题是非常基本的,但正如我所解释的,我在这方面很新手) – Kevin 2012-01-06 00:11:31

+0

再次查看你的代码,你可能想要定义一个小类,并使用它的列表,而不是使用hashmap。一个会有id,lat和long成员的类。 http://kkrit.com/n/Java_1.6_Tutorial/java/javaOO/classes.html这是一个如何声明一个类的例子。例如,要像现在那样访问lat,您需要执行map.get(“lat”);. – Joru 2012-01-06 09:15:01

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); 
} 
+0

嗨马文 - 完美的工作,非常感谢你的快速反应! – Kevin 2012-01-05 23:49:13

+0

它工作完美,但小问题,我在我的代码map.get(经纬度); ,map.get(长); map.get(id)然后是它的工作人员,我投了你的thax – 2012-12-13 06:47:07

相关问题