Kotlin mutableMap автоматически меняется в android? - PullRequest
0 голосов
/ 31 января 2020

Я устанавливаю kotlin изменяемую карту в моей viewModel, как это,

// In ViewModel
var mapData= mutableMapOf<Int, String>()

в моем фрагменте, я ссылаюсь на эту карту, как показано ниже,

//In fragment
lateinit var _mapData: MutableMap<Int, String>

// in oncreate View
_mapData[1] = "one"

Когда я Запустите приведенный выше код, этот _mapData автоматически обновляется до моей viewModel mapData Я не хочу этого,

Где у меня есть настоящая проблема, в следующем коде,

// initiallizing 
if(!_mapData.contains(2)){
_mapData[2] = _mapData[1]
}

//doing some process to get the actual _mapData[2]

_mapData[2] = "Two"

После выполнения вышеуказанного кода мой _mapData[1] также меняется на "Two".

Что это за поведение и почему оно происходит

1 Ответ

3 голосов
/ 01 февраля 2020

Не уверен, как назначить _mapData из mapData, но если вы просто напишите:

_mapData = viewModel.mapData

, тогда обе переменные сохранят ссылку на один и тот же объект карты. Таким образом, если вы измените что-либо с помощью ссылки mapData, содержимое _mapData также изменится (поскольку это один и тот же объект).

Если вы хотите иметь отдельные объекты карты в viewModel и фрагменте, вы должны скопировать карта:

_mapData = viewModel.mapData.toMutableMap()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...