Найден ответ -> копия класса данных с полем ArrayList - изменение ArrayList скопированного класса изменяет оригинал
У меня есть эта проводная ошибка. У меня есть список массива размером 3. Третий элемент является дубликатом второго элемента в списке. Я различаю их в зависимости от их позиции в списке. Проблема в том, что когда я делаю для l oop, чтобы изменить свойства элемента с индексом 1
, элемент с индексом 2
отражает то же самое изменение.
What I've tried so far. ...
- Я подтвердил, что список изменяется только в одном месте приложения.
- Добавлено больше полей для различения дубликатов.
- Установите операторы if, чтобы убедиться, что я изменяю только указанный элемент c.
What I think the solution is.
Я предполагаю, что, поскольку элементы с индексом 1 & 2
имеют взаимосвязанные отношения, поскольку они являются дубликатами друг друга. (даже с дифференцирующими факторами) Я не знаю, что это за отношения.
My code snippet.
private fun testing(selectedNormalModifier: ToppingModel) {
var modIndex = -1
selectedNormalModifier.parentPosition = selectedModifierPosition
selectedNormalModifier.localToppingName = modifierGroupModel!!.itemModifierGroups[selectedModifierPosition].itemLocalTitle.toString()
val itemToEdit = modifierGroupModel!!.itemModifierGroups[selectedModifierPosition]
for (i in itemToEdit.modifierGroups.modifiers.indices) {
val mod = itemToEdit.modifierGroups.modifiers[i]
if (mod.title == selectedNormalModifier.toppingName) {
modIndex = i
}
}
itemToEdit.modifierGroups.modifiers[modIndex].isItemSelected = true
mSelectedNormalModifiers.add(selectedNormalModifier)
Log.e(TAG, "how many times did we get here $modifierGroupModel")
}
Как видите, я очень конкретен c на элемент, который я хочу редактировать. Независимо от этого, элемент с индексом 2
также редактируется и наоборот.
This is how I duplicate the items
for (i in modifierGroupModel!!.itemModifierGroups.indices) {
val item = modifierGroupModel!!.itemModifierGroups[i]
// only do this if the display count is greater than one
if (item.modifierGroups.displayCount.toInt() > 1) {
for(i in 0 until item.modifierGroups.displayCount.toInt()){
val localIndex = i + 1
item.itemIndex = localIndex
item.itemLocalTitle = getNumberOfName(localIndex) + " " + item.modifierGroups.modifierGroupTitle
tempItemModifierGroupModel.add(if (i > 0) item.copy() else item)
}
} else {
item.itemIndex = i
tempItemModifierGroupModel.add(item)
}
}
val newModidiferGroupModel = ModifierGroupsModel(
itemID = modifierGroupModel!!.itemID,
itemName = modifierGroupModel!!.itemName,
itemModifierGroups = ArrayList(tempItemModifierGroupModel.toMutableList())
)
modifierGroupModel = newModidiferGroupModel
The JSON object looks like this
"item" {
"nested list"[
"isSelected": "false"
]
},
"item" {
"nested list"[
"isSelected": "false" // when i change this to true
]
},
"item" {
"nested list"[
"isSelected": "false" // this one changes as well
]
}
]```