更新特定位置的hashMap值

时间:2016-01-21 06:00:29

标签: android hashmap

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

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

我的适配器代码如下: -

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

4 个答案:

答案 0 :(得分:1)

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

第一次做的时候: -

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

第二次要更新时: -

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

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

ArrayList<String> alStr = new ArrayList<String>();

alStr.add ("abc");

用于更新“abc”的查找索引,然后

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

只需在视图标记messages.saveAsTextFiles("/tmp/spark/messages") 中设置密钥 现在,对于此视图的事件侦听器,您只需使用edQntity.setTag(KeyForThisView)来检索密钥。

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

答案 3 :(得分:0)

使用此

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

代表

  

/ **        *在指定的位置插入指定的元素        *清单。移动当前位于该位置的元素(如果有)和        *右边的任何后续元素(在其索引中加1)。        *        * @param索引索引,在该索引处插入指定的元素        *要插入的@param元素元素        * @throws IndexOutOfBoundsException {@inheritDoc}        * /

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++;
}