我在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.
谢谢大家。
答案 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");