【问题标题】:How to pass value to pagination DataSourcec in kotlin如何在kotlin中将值传递给分页DataSourcec
【发布时间】:2020-05-31 11:03:06
【问题描述】:

我必须根据特定的 id 获取分页数据。 id 通过意图进入活动。 那么我如何将该值传递给我的数据源。 我正在使用 mvvm 架构

【问题讨论】:

  • 从意图中获取数据,将其传递给视图模型,然后您可以将其发送到数据源。
  • 分页的数据源在视图模型创建时初始化。那么我如何将我的值传递给数据源
  • 您的视图模型将被延迟初始化,因此当您的视图模型正在初始化时,您将拥有数据,您可以将该数据转发到视图模型构造函数。
  • 你用的是java还是kotlin?
  • 我在使用 kotlin

标签: android kotlin datasource


【解决方案1】:

所以你可以做类似的事情

活动


class MainActivity : BaseActivity() {
    lateinit var binding: ActivityMainBinding
    var value: Int = 0
    private val viewModel: MainActivityViewModel by lazy {
        ViewModelProvider(this, MainActivityViewModel.Factory(value)).get(
            MainActivityViewModel::class.java
        )
    }

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

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        /*
        * get data from intent here and assign to value like
        */ 
        value=intent.getIntExtra("keyName",0)

        binding.viewModel = viewModel
        binding.lifecycleOwner = this
    }

}

由于我们的视图模型是惰性初始化的,所以它只会获得更新后的值。

现在你的视图模型

class MainActivityViewModel(value: Int) : BaseViewModel() {

    init {
/*
do initiaize your data source here now
*/

    }

    class Factory(val value: Int) : ViewModelProvider.Factory {
        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
            if (modelClass.isAssignableFrom(MainActivityViewModel::class.java)) {
                @Suppress("UNCHECKED_CAST")
                return MainActivityViewModel(value) as T
            }
            throw IllegalArgumentException("Unable to construct viewmodel")
        }
    }
}

现在您可以在 init 块中初始化您的数据源。现在您在视图模型中获得了通过意图发送的值。我正在使用工厂创建视图模型。

【讨论】:

  • 谢谢你的回复兄弟。终于找到解决问题的办法了。
  • 如果它对你有用,请接受答案,谢谢
猜你喜欢
  • 2016-11-23
  • 1970-01-01
  • 2018-11-22
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 2013-11-06
  • 1970-01-01
相关资源
最近更新 更多