Kotlin ViewModel Список строк - PullRequest
0 голосов
/ 03 мая 2019

Я новичок в Kotlin и ViewModel использует. Я пытаюсь создать простой ViewModel, который получил список строк. Идея состоит в том, чтобы обновить список путей изображения (String) в этой модели представления.

Моя проблема в том, что моя ViewModel не обновляется. Это только добавить 1 запись.

class PicturesViewModel : ViewModel() {

    var pictureListLive: MutableLiveData<MutableList<String>> = MutableLiveData()

    var list = ArrayList<String>()

    fun addPictureToList(picture: String) {
        list.add(picture)
        pictureListLive.value = list
    }
}

В своей деятельности я инициализирую viewModel и наблюдаю так:

 private fun configureViewModel(){
        this.picturesViewModel = ViewModelProviders.of(this).get(PicturesViewModel::class.java!!)
        this.picturesViewModel.pictureListLive.observe(this, Observer{
            if (it != null) {
                Log.i("Pictures",it.size.toString())
            }
        })
    }

И я добавляю одну строку в ViewModel:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_IMAGE_CAPTURE) {
            picturesViewModel.addPictureToList(currentPhotoPath)
            val intentPreview = Intent(this,PreviewActivity::class.java)
            intentPreview.putExtra("Picture",currentPhotoPath)
            startActivity(intentPreview)}

        if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CHOOSE_PHOTO){
            this.pictureSelectedPath = data?.data.toString()
            Log.i("Photo",pictureSelectedPath)
        }
    }

ActivityOnResult приходит после съемки изображения на камеру. Я хочу обновить список строк в ViewModel, чтобы добавить путь к камере изображения после нескольких снимков.

Когда я использую его таким образом, сегодня размер списка ViewModel остается равным 1. Я думаю, что в нем только последний.

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 03 мая 2019

Это вариант использования при инициализации и использовании простой ViewModel

//in your pictures fragment
private lateinit var picturesViewModel: PicturesViewModel

, чем в вашем onCreate

picturesViewModel= ViewModelProviders.of(this).get(PicturesViewModel::class.java)

После инициализацииviewmodel, вы можете наблюдать изменения данных, которые происходят там, под инициализацией курса:

picturesViewModel.pictureListLive.observe(this, Observer {
            //list changes are handled here 
        })

Если бы я переписал вам ViewModelClass, это было бы так:

class PictureViewModel : ViewModel() {

    private var pictureListLive: MutableLiveData<MutableList<String>> = MutableLiveData()


    fun setPictureList(picture: String) {
       val list = ArrayList<String>()
       list.add(picture)
       pictureListLive.value = list 
    }
}

Существуетнет необходимости возвращать список, потому что MutableLiveData работает в логике публикации-подписки, известной как Observable Pattern.

Это похоже на EventBus или RxJava операторы

Примечание

Мне нужно больше информацииоб этом setPictureList методе, потому что он не имеет особого смысла.Или, может быть, вы хотите назвать это где-то еще или idk.

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