关于android:在特定位置更新hashMap值

Updating hashMap value on specific position

我尝试了很多方法来更新特定位置的hashMap值,但我无法做到。 我有一个自定义数组列表,其中我存储了特定位置数组列表的哈希映射数组列表。 在我的列表视图适配器中,我根据hashmap数组列表的数量创建动态线性布局,在该线性布局中我也有编辑文本。

现在点击每个线性布局项目的编辑文本。 我必须更新该特定位置和特定值的哈希映射值。

我的适配器代码是这样的: -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
for (j = 0; j < arry_tickt_info.get(position).getArray_ticket_data().size(); j++) {

// Create LinearLayout
LinearLayout ll = new LinearLayout(context);
ll.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams qntityParams = new LinearLayout.LayoutParams(0,60, 1f);

// Create Quantitiy EditText
final EditText edQntity = new EditText(context);
final ArrayList<HashMap<String, String>> hashMaps = arry_tickt_info.get(j).getArray_ticket_data();
edQntity.setText(arry_tickt_info.get(position).getArray_ticket_data().get(j).get("quantity"));

edQntity.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
    if (!hasFocus) {
        final int position = v.getId();

        for (Map.Entry<String, String> e1 : hashMaps.get(Integer.parseInt(txtHiddenId.getText().toString())).entrySet()) {
            String s = e1.getValue();
            String s1 = e1.getKey();

            if (e1.getKey().equalsIgnoreCase("quantity")) {

                String roundedOff = edQntity.getText().toString();
                e1.setValue(String.valueOf(roundedOff));
                Log.e("updatedValue::::","updatedValue::::" + roundedOff);
            }
        }
    }
}
});

edQntity.setGravity(Gravity.CENTER_HORIZONTAL);
edQntity.setEms(2);
edQntity.setHeight(60);
edQntity.setBackgroundResource(R.drawable.edittext_grey_outline);
edQntity.setTextColor(Color.parseColor("#555555"));
edQntity.setLayoutParams(qntityParams);

ll.addView(edQntity);
}


不确定你要做什么,但是要更新Hashmap值,你可以使用相同的put函数,使用它来设置之前的值。当你使用put时,它会创建带有该键的行,如果还没有,如果key存在,那么它将更新该键的值。

第一次做的时候: -

1
map.put("key","value1");

第二次想要更新: -

1
map.put ("key","value2"); //remember you need to have exact same key you used previously while inserting an entry.

对于arraylist你有设置(索引,值);即

1
2
3
ArrayList<String> alStr = new ArrayList<String>();

alStr.add ("abc");

用于更新"abc"的查找索引然后

1
alStr.add (0,"abc"); //used 0 as currently we have only one item.

用这个

1
2
3
4
5
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("Your_specific_key","Value");
        map.put("Your_specific_key","Value");
        map.put("Your_specific_key","Value");
        your.add(Position_num, map);

对于

/**
* Inserts the specified element at the specified position in this
* list. Shifts the element currently at that position (if any) and
* any subsequent elements to the right (adds one to their indices).
*
* @param index index at which the specified element is to be inserted
* @param element element to be inserted
* @throws IndexOutOfBoundsException {@inheritDoc}
*/

1
2
3
4
5
6
7
8
9
10
public void add(int index, E element) {
    if (index > size || index < 0)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));

    ensureCapacityInternal(size + 1);  // Increments modCount!!
    System.arraycopy(elementData, index, elementData, index + 1,
                     size - index);
    elementData[index] = element;
    size++;
}


我可以告诉你一种降低复杂性的快捷方法

只需在视图标记edQntity.setTag(KeyForThisView)中设置密钥即可
现在,对于此视图的事件侦听器,您只需使用edQntity.getTag()来检索键。

因为你有密钥只是更新hashMap中的值。为什么这样繁重的操作再次遍历整个地图。


您可以使用密钥替换(键,值)方法更新HashMap值。

1
2
 String s1 = e1.getKey();  
 hashMaps.replace(s1, roundedOff); //HashMap  s1 key value replaced by roundedOff value.