如何从Arraylist <hashmap <string,string =“”>&gt;中删除所选项目在android中

时间:2016-01-19 06:45:29

标签: java android listview arraylist hashmap

我在ListView中使用Arraylist < HashMap< String, String >>来存档多列(我只需要两列,所以我使用HashMap)。但是当我在上下文菜单中使用remove方法时。它总是会删除列表中的最后一项。

代码:

@Override
public boolean onContextItemSelected(MenuItem item) {
    final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.bc_contextmenu_delete:
            list.remove(info.position);
            adapter.notifyDataSetChanged();
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

如何解决此问题以从列表中删除所选的问题?

此外,我还希望从ArrayList中的HashMap中获取这两个值。我应该在这里使用哪些代码。

这是一个ArrayList:

PS4 4000<br>
PS5 5000<br>
XBOX 6000<br>

我想获得PS4和4000.

谢谢大家。

3 个答案:

答案 0 :(得分:0)

无需将HashMap包装到ArrayList中。 HashMap本身就足够了。如果您想保留订单,则应使用mozilla docs。 副作用是您无法通过索引访问元素,因此您必须迭代它以获取最后一个项目或索引的项目。

因此,如果你不关心重复,我会使用ArrayList作为模板对或自定义对象。 (我更喜欢自定义对象更具可读性)

ArrayList<Pair<String,String>> consoles = new ArrayList<Pair<String,int>>();
consoles.Add(Pair.create("PS4", 4000));
consoles.Add(Pair.create("PS5 ", 5000));
consoles.Add(Pair.create("XBOX ", 6000));

使用索引删除:

consoles.Remove(index);

答案 1 :(得分:0)

根据您的要求,您可以为其创建一个bean。即DummyBean。它有两个字段,如

class DummyBean{
String name;
String val;

--getter setter method
}

将其用于List<DummyBean>。 将来,如果添加的新列很容易添加和扩展。

答案 2 :(得分:0)

要从ArrayList中的Hashmap存储和检索值,您需要使用键存储HashMap值以识别它们

与您的示例一样,

PS4 4000
PS5 5000
XBOX 6000

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

    // to add item
    HashMap<String ,String> val = new HashMap<>();
    val.put("GAME", "PS4");
    val.put("NUMBER", "4000");
    list.add(val); //added to 0th index position

    val = new HashMap<>();
    val.put("GAME", "PS5");
    val.put("NUMBER", "5000");
    list.add(val); //added to 1st

    // to retrieve ps4 and 400
    String forPS4 = list.get(0).get("GAME");
    String for4000 = list.get(0).get("4000");