Как изменить данные наблюдаемой модели представления в android? - PullRequest
0 голосов
/ 25 февраля 2020

Я создал gridView с ArrayAdapter, gridView содержит только фотографии, я извлекаю URL-адрес изображения в массиве и наблюдаю за массивом в процессе своей деятельности. Вот моя модель представления

class ProfileViewModel constructor(): ViewModel() {
    var first_name: String? = null
    var last_name: String? = null
    var dob: String? = null
    var address: String? = null
    var organization: String? = null
    var hobby: String? = null
    var bio: String? = null
    var imagePath: String = ""

    private val imageList : MutableLiveData<ArrayList<ProfileViewModel>> = MutableLiveData()

    constructor(photo : Photo) : this() {
        this.imagePath = photo.imageUrl
    }

    fun getImageUrl() : String {
        return imagePath
    }

    companion object {
        @BindingAdapter("imageUrl")
        @JvmStatic
        fun loadImage(imageView: ImageView, imageUrl: String) {
            Glide.with(imageView.context)
                .load(imageUrl)
                .apply(RequestOptions.centerCropTransform())
                .placeholder(R.drawable.ic_add_icon)
                .into(imageView)
        }
    }

    val profileViewModels : MutableLiveData<ArrayList<ProfileViewModel>>
        get() {
            val profileViewModels = ArrayList<ProfileViewModel>()

            val photo1 = Photo("")
            val profileVM = ProfileViewModel(photo1)
            repeat(6) {
                profileViewModels.add(profileVM)
            }

            imageList.value = profileViewModels
            return imageList
        }
    }
}

Вот моя деятельность, в которой я наблюдаю данные

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding: ActivityProfileBinding =
            DataBindingUtil.setContentView(this, R.layout.activity_profile)

        val viewModel = ViewModelProvider(this).get(ProfileViewModel::class.java)

        viewModel.profileViewModels.observe(this,
            Observer<ArrayList<ProfileViewModel>> { image_paths ->
                Log.d("added", "$image_paths")
                val imageAdapter = ImageAdapter(this@Profile, R.layout.image_card, image_paths!!)
                gridView.adapter = imageAdapter
            })
}

Я получаю изображения в gridView, но я хочу обновить наблюдаемое значение в элементе gridView нажмите в выбранной позиции. Как мне это сделать?

1 Ответ

0 голосов
/ 25 февраля 2020

Во-первых, вы можете создать функцию в viewmodel, которую вы хотите сделать при нажатии. например:

private fun doSomethingWhenClicked(listPosition: Int){
    val clickedImage = profileViewModels[position]

    //do something here for clicked image
    //..
}

Затем инициализируйте модель представления в адаптере, как this . Таким образом, вы можете обновить profileViewModels в onClickListener внутри ImageAdapter

viewmodel.doSomethingWhenClicked(position)

Надеюсь, этот ответ вам!

...