【问题标题】:How to get value of specific key from listview using entry如何使用条目从列表视图中获取特定键的值
【发布时间】:2013-12-11 15:18:27
【问题描述】:

我遇到了getting all the value from specific key 的 hashmap listview 问题。我这里有两个listview,第一个listview 是显示从数据库中获取的数据,第二个listview 是获取从第一个listview 中选择的数据。现在,我希望从第二个列表视图中获取 (FOODID3, itemID) 的所有值以通过 toast 显示,但我目前只能获取从第一个列表视图收到的最新值。我认为问题是因为我在适配器上设置了 notifyDataSetChanged。请帮忙!谢谢!

这是我第一个从数据库中获取数据的列表视图

private void listMenu(String CID)
{               
    ArrayList<Object> data = DB.getFood(CID);

    LIST2 = new ArrayList<HashMap<String, String>>();

    for (int i=0; i<data.size(); i=i+4)
    {   
        HashMap<String, String> map = new HashMap<String, String>();

        map.put(FOODID2, (String) data.get(i));
        map.put(FOODNAME2, (String) data.get(i+1));
        map.put(PRICE2, (String) data.get(i+2));
        map.put(RATING2, (String) data.get(i+3));

        LIST2.add(map);
    }

    LISTMENU = (ListView) findViewById(R.id.listMenu);

    final List2Adapter adapter = new List2Adapter(MainActivity.this, LIST2);
    LISTMENU.setAdapter(adapter);


    LISTMENU.setOnItemClickListener(new OnItemClickListener() 
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
        {

            HashMap<String, String> map = LIST2.get(position);

            itemValue = map.get(FOODNAME2);
            itemID = map.get(FOODID2);

            Toast.makeText(getApplicationContext(),
                    "Food ID : " + itemID + "ListItem : " + itemValue , Toast.LENGTH_SHORT)
                    .show();

            listOrder(itemValue, itemID);
         }
    });
}

这是接收从第一个列表视图中选择的数据的第二个列表视图。

private void listOrder(String itemValue, String itemID)
{   
    HashMap<String, String> map = new HashMap<String, String>();

    String quantity = "1";

    map.put(FOODID3, itemID);
    map.put(FOODNAME3, itemValue);  
    map.put(FOODQUANTITY3, quantity);

    //problem is here, I can only display the latest data received
    for(Entry<String, String> entry: map.entrySet())
    {
        if(entry.getKey().equals(FOODID3))
        {
            Toast.makeText(getApplicationContext(),
            "EXISTS "  + entry.getValue(), Toast.LENGTH_SHORT)
            .show();
        }
    }

    LIST3.add(map);

    LISTORDER = (ListView) findViewById(R.id.listOrder);

    List3Adapter adapter = new List3Adapter(MainActivity.this, LIST3);
    LISTORDER.setAdapter(adapter);

    adapter.notifyDataSetChanged();

    LISTORDER.setOnItemClickListener(new OnItemClickListener() 
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
        {

        }
    });
}

【问题讨论】:

  • 一个映射不能包含给定键的多个值。

标签: java android listview android-listview hashmap


【解决方案1】:

您的地图可以包含重复的值,但不能包含重复的键

每次使用现有键名添加元素时,它都会用新键名覆盖旧值

请通过Oracle Tutorials - Map

【讨论】:

  • 你想达到什么目的?
  • 其实我也有类似这个问题的问题stackoverflow.com/questions/3900281/updating-list-hashmap我想检查从第一个列表视图中获得的itemID是否已经存在于第二个列表视图中,数量++所以现在我仍然试图得到通过使用 toast 对我从 for 循环中得到的内容进行测试,从 FOODID3 的键中获取所有值
【解决方案2】:

我不明白你想将第三个食物附加到地图上吗?如果是这样,您应该再次初始化映射,无论如何这是错误的方法,您还应该创建一个 Food 对象并创建 Food 对象的 HashMap,而不是将所有 key=>values 放入其中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多