【问题标题】:Is it right how to pass the id ? I didn't understand the error? [closed]如何传递 id 是否正确?我不明白错误? [关闭]
【发布时间】:2020-10-25 21:49:01
【问题描述】:
/*****here the Adapter of my list *****/

class CurrencyMenuAdapter(
var viewModel : MainViewModel,
var currencyList: ObservableList<CurrencyRoomItem>) : ObservableRecyclerViewAdapter<CurrencyRoomItem, BaseViewHolder<CurrencyRoomItem>>(currencyList){
private val TAG = "CurrencyMenuAdapter"
private val model = MainViewModel()
override fun onCreateViewHolder(
    parent: ViewGroup,
    viewType: Int
): BaseViewHolder<CurrencyRoomItem> {
    Log.e(TAG, "onCreateViewHolder: 1")
    return Holder(
        ItemcurrencymenuBinding.inflate(
            LayoutInflater.from(parent.context),
            parent,
            false
        )
    )
}
override fun onBindViewHolder(
    holder: BaseViewHolder<CurrencyRoomItem>,
    position: Int
) {
    Log.e(TAG, "onCreateViewHolder: 1")
    holder.bind(currencyList[position])


}
inner class Holder(private val binding:ItemcurrencymenuBinding) :
    BaseViewHolder<CurrencyRoomItem>(binding.root) {
    override fun bind(item: CurrencyRoomItem) {
        binding.item = item
        binding.btnCurrency.setOnClickListener{
            viewModel.goToRoom(item.id!!)
            Paper.book().write(Const.SAVE_ID, item.id)


        }
    }
}

} / / / >/ /************************************************* ************************************************/

/这里是 ViewModel/

类 MainViewModel:BaseViewModel() {

var firstName = ObservableField<String>()
var lastName = ObservableField<String>()
var userEmail = ObservableField<String>()
var phoneNumber = ObservableField<String>()
var listRoom= ObservableArrayList<CurrencyRoomItem>()
lateinit var id :String
private var useCase = GetCurrenciesMenuUseCase()
init {
}
fun goToRoom(groupId:String){
  getNavigator()!!.town(groupId)
}

/ViewModel/

/*****这里是Activity*****/

类 MainActivity : BaseActivity(), MainNavigator {

private lateinit var model: MainViewModel
private lateinit var alertDialog: AlertDialog
var dialog: Dialog? = null
override fun hideLogoutDialog() {
    alertDialog.dismiss()
}

var loginResponse = ObservableField<LoginResponse>()
override fun town(groupId: String) {

    startActivity(Intent(this@MainActivity, CurrencyRoomActivity::class.java))
    finish()
}

/活动/

/这里是 BaseViewModel/

abstract class BaseViewModel<N> : ViewModel() {
private  var mCompositeDisposable: CompositeDisposable = CompositeDisposable();
private lateinit var mNavigator: WeakReference<N>

fun getNavigator(): N? {
    return mNavigator?.get()
}

fun setNavigator(navigator: N) {
    this.mNavigator = WeakReference(navigator)
}
override fun onCleared() {
    mCompositeDisposable.dispose()
    super.onCleared()
}

fun getCompositeDisposable(): CompositeDisposable {
    return mCompositeDisposable
}

}

/BaseViewModel/

/错误/

//这里的错误 Error

/错误/

【问题讨论】:

  • 你能对你的代码试图做什么做一些解释吗?您也可以在问题中分享错误消息而不仅仅是链接

标签: java android android-layout kotlin mvvm


【解决方案1】:

错误意味着 mNavigator 在它有值之前被使用,通过说 lateinit 你“承诺”永远不会发生这种情况。

你在调用 setNavigator 之前调用 getNavigator(你从不调用 setNavigator)

要修复它,您只需在调用 getNavigator 之前调用 setNavigator。这将解决您的具体问题,但 getNavigator 和 setNavigator 似乎有点奇怪,也许考虑在构造函数中初始化它

编辑:

我猜你需要传递 MainActivity,因为它将 MainNavigator 扩展到 setNavigator。在这种情况下,只需在 MainActivity 中使用 ViewModel 变量并调用

viewModel.setNavigator(this)

MainActivity 扩展了 MainNavigator 和 MainViewModel 扩展了 BaseViewModel,这样应该可以工作

【讨论】:

  • 当我调用它时我可以传递什么参数?
  • 老实说,它似乎必须传递 MainActivity 因为它扩展了 MainNavigator 但我不知道您尝试遵循什么教程,我会使用新导航组件之类的东西.但是请检查更新的答案,这应该也可以。
  • 对不起:/同样的错误
  • 您需要在调用 getNavigator 之前调用 setNavigator,当您在 onCreate 中调用 setNavigator 并且仅在 onClickListener 中调用 getNavigator 时,不应发生错误
  • 你的意思是在 baseActivity 中?只有我有 Oncreate 功能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
相关资源
最近更新 更多