Как получить доступ (итерировать?) К ArrayList / Hashmap в другом классе? - PullRequest
1 голос
/ 06 января 2012

Я определил ArrayList в своем основном классе, где я загружаю данные из XML-канала и создаю различные вкладки с различными действиями:

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

Пример, где я помещаю запись карты в ArrayListHashMaps:

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' в ArrayList / Hashmap "mylist" в основном классе ( Примечание : Я объявил ArrayList / Hashmap в основном классе, а затем поделился имвсе действия, потому что это довольно большой поток XML, и я не хотел перезагружать данные или иметь слишком много объектов в памяти ).

Моя цель -преобразовать эти координаты широты / долготы в GeoPoints и отобразить их, используя наложение карты;Я уже могу сделать это, используя фиксированные GeoPoints, жестко запрограммированные в классе активности Map.Однако, как я уже писал выше, мне теперь нужно заменить эти «фиксированные» GeoPoints и вместо этого использовать содержимое «mylist» ArrayList / Hashmap.

Я новичок (<1 месяц опыта) в программировании Java /Android, так что я надеюсь, что все это имеет смысл?И я надеюсь, что кто-то сможет объяснить / привести пример того, как я могу получить доступ к данным ... Я пытался реализовать различные меры, такие как '<strong> Итерации ', но это пока не работает.

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Если я правильно понимаю ваш вопрос, вы искали способ повторить над 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 голосов
/ 06 января 2012

Вы можете сделать пару вещей.Вы могли бы сделать ваш канал статической переменной.Если он был статическим, вы можете получить к нему доступ из любого места, написав 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())
...