所以我的问题是以下几点:
holder.buttonViewID.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if(isChecked){
toggle.setCompoundDrawablesWithIntrinsicBounds(null, rmfcart , null, null);
try {
pack.put("imgid", resID2);
pack.put("desc", descval);
Log.d("PERSODEBUG", pack.toString());
trolly.put(itemID, pack.toString());
Log.d("PERSODEBUG", trolly.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
[...]
pack和trolly是JSONObjects,
trolly的运行状况非常好,我可以向其中添加项目并将其删除,它的行为符合预期,但问题出在包装上。每次更改时,已经添加到trolly的所有pack实例都会被修改。
例如:
if i add an item to trolly:
{"2":{"imgid":2131165314,"desc":"test1"}}
if i add a 2nd item:
{"2":{"imgid":2131165330,"desc":"test2"},"3":{"imgid":2131165330,"desc":"test2"}}
如您所见,旧的和旧的pack实例都在trolly内部进行了修改,
谁能告诉我如何在trolly里面写一个固定的pack实例字符串来避免这个问题?我确实尝试了一些方法,例如
如您在上面看到的toString()没有任何作用。
非常感谢
最佳答案
您应该在每次添加之前创建新的pack实例,而不是全局实例
JSONObject pack = new JSONObject(); // new instance
pack.put("imgid", resID2);
pack.put("desc", descval);
Log.d("PERSODEBUG", pack.toString());
trolly.put(itemID, pack.toString());