2014-10-01 8 views
-1

Предположим, что мы добавили ссылку из RSS-фидера в HashMap следующим образом.Получение значений ключа/пары из HashMap

if (currentChild.getNodeName().equalsIgnoreCase("link")) { 
          //L.m(currentChild.getTextContent()); 
          currentMap.put("link", currentChild.getTextContent()); 


          } 

Другими словами наша HashMap containts пар ключ/значение, как показано ...

("link",http://........), 
    ("link",http://........), 
    ("link",http://........) and so on.... 

Теперь я хочу, чтобы извлечь эти ссылки следующим способом ..

@Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 



     } 

Я хочу открыть ссылки в WebViews. Я сделал что-то подобное, но сохранял данные, такие как заголовки и ссылки, в простой ArrayList. Теперь я пытаюсь что-то подобное с HashMaps, и я застрял.

Заранее спасибо.

+4

map.put («ключ», «значение»), map.put («ключ», «значение»), приводит к отображению только 1 значения.вам следует рассмотреть возможность использования массива (списка) для таких вещей. перебрать карту и получить ключ/значение, которое вы можете использовать для (Map.Entry cur: map.entrySet()) {cur.getKey(); cur.getValue(); } например. – damian

+0

Где вы застряли? Что вы пробовали? – Okas

+0

Привет, друзья. Я еще ничего не пробовал. Я вернусь, когда у меня есть что-то лучшее для показа. – Theo

ответ

0

я нашел время, чтобы исправить это.

static ArrayList<HashMap<String, String>> results; 
    . 
    . 
    . 
    @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 

        HashMap<String, String> hm = results.get(position); 
        String link = hm.get("link"); 
        L.m(link); 
        if (!link.equals("")) { 
         //do what ever you like to do with link; 
         Intent browserIntent = new Intent(MainActivity.this, WebActivity.class); 
         browserIntent.putExtra("url",link); 
         startActivity(browserIntent); 
        } 
       } 

Я не использовал цикл Еогеасп как ключ/значения пары, где повторяющиеся внутри onItemClick() метод (получить (положение). Спасибо за вашу помощь.

С уважением, Тео.

1

Вы можете использовать любую реализацию концепции MultiMap. Например, Apache Commons-коллекции или гуавы или другой реализации:

некоторое объяснение Multimap с гуавы:

http://tomjefferys.blogspot.com/2011/09/multimaps-google-guava.html

некоторое объяснение Multimap с апача библиотеки Обще-коллекции:

https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/MultiMap.html

Наконец, вы можете реализовать MultiMap самостоятельно, как описано в первой ссылке. удачи.

1

Вам нужна коллекция с четко определенным порядком, чтобы сделать эту работу, поскольку ListView принимает порядковое положение для каждого из своих элементов.

Попробуйте что-то вроде следующего:

Создать коллекцию ссылок с помощью списка, содержащего android.util.Pair, как это:

private List<Pair<String, Uri>> links = new ArrayList<Pair<String, Uri>>(); 

Создать

ArrayAdapter<Pair<String, Uri>> 

и инициализировать его с указанным выше списком

Затем ваш onItemClick реализация будет выглядеть следующим образом:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
{ 
    ArrayAdapter<Pair<String, Uri>> adapter = (ArrayAdapter<Pair<String, Uri>>)parent.getAdapter(); 
    Pair<String, Uri> item = adapter.getItem(position); 

    String linkLabel = item.first; 
    Uri linkUri = item.second; 
} 

Наконец, чтобы избежать дубликатов в списке, вы можете использовать класс содержит метод:

Pair<String, Uri> linkToAdd = new Pair("Amazon", Uri.parse("http://www.amazon.com")); 

    if (!links.contains(linkToAdd)) 
    { 
     links.add(linkToAdd); 
    }