Как перезаписывать значение, передаваемое через ViewModel?

С ViewModel сталкиваюсь впервые, пожалуйста, помогите решите проблему. При первом открытии фрагмента все хорошо, String передается как надо. Но если я закрою фрагмент, а потом открою его снова, в логах видно, что в фрагмент приходит старое значение. И при попытке передать новое значение из активити приложение крашится. Я так понимаю, что нужно как-то обнулять значение imageUri после закрытия фрагмента? Подскажите, пожалуйста, как это сделать?

open class DataModel : ViewModel() { 
 val imageUri: MutableLiveData<String> by lazy { 
 MutableLiveData<String>() 
 } 
}

Активити:

class MainActivity : AppCompatActivity() { 
 private val dataModel: DataModel by viewModels() 
private var picture = "" 

fun putPictureFromGallery() { 
 val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) 
 intent.type = "image/*" 
 if (intent.resolveActivity(packageManager) != null) { 
 return startActivityForResult( 
 Intent.createChooser(intent, "put picture"), 
 Constants.MAIN_REQUEST_CODE 
 ) 
 }

@RequiresApi(Build.VERSION_CODES.KITKAT) 
 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 
 val imageUri: Uri? 
 if (requestCode == Constants.MAIN_REQUEST_CODE && resultCode == RESULT_OK) { 
 if (data != null) { 
 imageUri = data.data 
 picture = imageUri.toString() 
 
 contentResolver.takePersistableUriPermission(data.data!!, Intent.FLAG_GRANT_READ_URI_PERMISSION) 
 
if (picture.isNotEmpty())  dataModel.imageUri.value = picture 

 } 
 } 
 super.onActivityResult(requestCode, resultCode, data) 
 }
}

Фрагмент:

class DetailFragment : Fragment() { 
 private val dataModel: DataModel by activityViewModels()

override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 
 super.onViewCreated(view, savedInstanceState) 
 dataModel.imageUri.observe(activity as LifecycleOwner, { 
 addImage(it) 
 }) }

private fun initBottomNavigationView() { 
 binding!!.bnvDetail.setOnItemSelectedListener { 
 when (it.itemId) { 
 R.id.addImage -> { 
 (activity as MainActivity).putPictureFromGallery() 
 }
 }
}

private fun addImage(uri: String) { 
 uriImages.add(uri) }

Ответы (0 шт):