【问题标题】:How to modify the value in an ArrayList<HashMap<String, String>>?如何修改 ArrayList<HashMap<String, String>> 中的值?
【发布时间】:2016-01-23 13:08:42
【问题描述】:

我遇到了如何修改 ArrayList> 中的值的麻烦。

例如, 我有一个 ArrayList

1 个

2 两个

三三

现在我想编辑 1 到 0 零然后列表将作为

0 零

2 两个

三三

我该怎么做?

抱歉,我忘记发布我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getLayoutInflater().inflate(R.layout.budgetcounting, contentFrame);


    setTitle(drawer_menu[3]);
    listView = (ListView)findViewById(R.id.bc_listItems);

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

    balance = (TextView)findViewById(R.id.bc_balance);
    budget = (TextView)findViewById(R.id.bc_budget);
    balance.setText("Balance: ");
    budget.setText("Budget: ");

    addBtn = (Button)findViewById(R.id.bc_btnadd);
    budgetBtn = (Button)findViewById(R.id.bc_btnbudget);

    addBtn.setOnClickListener(this);
    budgetBtn.setOnClickListener(this);

    HashMap<String, String> temp = new HashMap<String, String>();
    temp.put(FIRST_COLUMN, "1");
    temp.put(SECOND_COLUMN, "one");

    HashMap<String, String> temp1 = new HashMap<String, String>();
    temp1.put(FIRST_COLUMN, "2");
    temp1.put(SECOND_COLUMN, "two");

    HashMap<String, String> temp2 = new HashMap<String, String>();
    temp2.put(FIRST_COLUMN, "3");
    temp2.put(SECOND_COLUMN, "three");

    list.add(temp);
    list.add(temp1);
    list.add(temp2);

    adapter = new BC_ListViewAdapter(this, list);
    listView.setAdapter(adapter);

    registerForContextMenu(listView);
}

这里是删除部分的代码:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.bc_contextmenu, menu);
}

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

适配器:

public class BC_ListViewAdapter extends BaseAdapter {

public ArrayList<HashMap<String, String>> list;
Activity activity;

TextView txtFirst;
TextView txtSecond;

public BC_ListViewAdapter(Activity activity, ArrayList<HashMap<String, String>> list) {
    super();
    this.activity = activity;
    this.list = list;
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = activity.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.bc_column, null);

        txtFirst = (TextView) convertView.findViewById(R.id.bc_itemname);
        txtSecond = (TextView) convertView.findViewById(R.id.bc_itemvalue);
    }
        HashMap<String, String> map = list.get(position);
        txtFirst.setText(map.get(FIRST_COLUMN));
        txtSecond.setText(map.get(SECOND_COLUMN));

        return convertView;
}
}

【问题讨论】:

  • 您的代码在哪里?你试过什么?
  • 这是一个包含三个映射的列表(每个条目一个条目)还是一个包含一个映射的列表(三个条目)?
  • 对不起,我忘了发布我的代码。在这里,我正在尝试编辑这些值。我希望将来做一个柜台。那就是我有10美元。我在清单中添加了一个售价 8 美元的糖果。该应用程序将显示我还剩下 2 美元。但是我需要编辑值以防我输入错误的值。非常感谢!

标签: android arraylist hashmap


【解决方案1】:

这是你需要的吗?

list.get(0).put(FIRST_COLUMN, "0");
list.get(0).put(SECOND_COLUMN, "zero");

编辑:

在您的适配器中更改它,

@Override
public long getItemId(int position) {
    return position;  //instead of zero
}

并使用list.remove(info.id) 从列表中删除项目

【讨论】:

  • 真的需要删加吗?我不能直接编辑这些值?无论如何,谢谢!但我有一个问题。删除 1 后,列表中的 position[0] 将变为空。我想知道如果 2 两个(位置 [1])会改变位置 [0]?
  • 谢谢!最后一个问题。我会使用上下文菜单来执行删除和编辑部分。一旦我使用 list.remove(info.position);无论我选择删除哪个项目,它都会从列表中删除最后一个 3 3 的项目。
  • 使用list.remove(info.id); 而不是list.remove(info.position)
  • 它不起作用。它没有改变任何东西。我想知道它是否与ArrayList中的HashMap有关。我还发布了适配器。你介意看看吗。导致我的问题可能有问题。
  • 它无论如何都不起作用。我尝试使用 list.remove(1) 而不是 list.remove(info.position) 来删除 1 个。但它仍然会删除最后一项。
猜你喜欢
  • 1970-01-01
  • 2013-10-05
  • 2014-01-02
  • 2012-07-13
  • 1970-01-01
  • 2013-07-29
  • 2017-06-01
  • 2012-06-18
  • 2011-12-02
相关资源
最近更新 更多