如何更改android中的viewmodel可观察数据?

问题描述 投票:0回答:1

我创建了一个具有ArrayAdapter的gridView,gridView仅包含照片,我在Array中获取图像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 Item单击位置上的可观察值。我该怎么办?

android observable reactive-programming android-lifecycle
1个回答
0
投票

首先,您可以在viewmodel中创建一个想要单击的函数。例如:

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

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

然后,像this一样在适配器中初始化视图模型。因此,您可以在profileViewModels]中的onClickListener中更新ImageAdapter

viewmodel.doSomethingWhenClicked(position)

希望这个回答你!

© www.soinside.com 2019 - 2024. All rights reserved.