我尝试了很多方法来更新特定位置的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);
}
答案 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++;
}