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++; } |
我可以告诉你一种降低复杂性的快捷方法
只需在视图标记
现在,对于此视图的事件侦听器,您只需使用
因为你有密钥只是更新hashMap中的值。为什么这样繁重的操作再次遍历整个地图。
您可以使用密钥替换(键,值)方法更新HashMap值。
1 2 | String s1 = e1.getKey(); hashMaps.replace(s1, roundedOff); //HashMap s1 key value replaced by roundedOff value. |