从HashMap获取键/对值

时间:2014-10-01 11:36:09

标签: java android

让我们假设我们将RSS Feed的链接添加到HashMap中,如下所示。

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


                            }

换句话说,我们的HashMap包含一个键/值对,如图所示......

   ("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类似的东西,而且我被卡住了。

提前谢谢你。

3 个答案:

答案 0 :(得分:1)

您可以使用MultiMap概念的任何实现。例如apache commons-collection或guava或其他实现:

使用番石榴对MultiMap的一些解释:

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

使用apache commons-collection库对MultiMap进行一些解释:

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

最后,您可以自己实现MultiMap,如第一个链接中所述。祝你好运。

答案 1 :(得分:1)

由于ListView假定每个项目的序数位置,因此您需要一个具有明确定义顺序的集合才能使其正常工作。

尝试以下内容:

使用包含android.util.Pair的List创建您的链接集合,如下所示:

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;
}

最后,为避免列表中的重复,您可以使用contains方法:

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

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

答案 2 :(得分: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);
                    }
                }

我没有使用任何foreach循环作为在onItemClick()方法内重复的键/值对(get(position)。感谢您的帮助。

此致 西奥。