2012-01-05 2 views
1

я определил ArrayList в моем главном классе, где я загрузка данных из фида XML и создаю различные вкладки с различными видами деятельности:Как получить доступ (повторить?) ArrayList/Hashmap в другом классе?

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

Примером, где я положил запись на карту в ArrayList из HashMaps:

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-канал и я не хотел перезагружать данные или иметь слишком много объектов в памяти).

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

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

ответ

0

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

Привет Joru, да я уже объявлен «MyList» ArrayList в качестве статической переменной, как вы предложили - а не пропуская его через Intent. С вашим предложением выше, я теперь смог успешно перебирать через ArrayList и отображать все данные в моих объектах hashmap в Logcat. Однако, получив значения, я все еще не понимаю, как получить доступ к определенной записи, такой как id, lat или long? (Извините, если мой вопрос очень прост, но поскольку я объяснил, что я очень новичок в этом) – Kevin

+0

Еще раз взглянув на ваш код, вы можете определить какой-то небольшой класс и использовать его список вместо использования hashmap. Класс, который будет иметь элементы id, lat и long. http://kkrit.com/n/Java_1.6_Tutorial/java/javaOO/classes.html это пример того, как объявить класс. Чтобы получить доступ к lat, например, как у вас сейчас, вам нужно сделать map.get («lat») ;. – Joru

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

+0

он работает отлично, но небольшая проблема у меня меняется в моем коде map.get (lat); , Map.get (длинный); map.get (id), то его работник., я проголосовал u thax –

Смежные вопросы