java - 如何传递 id 是否正确?我不明白错误?
问题描述
/*****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)
}
/视图模型/
/*****这里是活动*****/
类 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
}
}
/基础视图模型/
/错误/
//这里是errorr 错误
/错误/
解决方案
该错误意味着 mNavigator 在它具有值之前被使用,通过说 lateinit 你“承诺”永远不会出现这种情况。
你在调用 setNavigator 之前调用 getNavigator(你从不调用 setNavigator)
要修复它,您只需在调用 getNavigator 之前调用 setNavigator。这将解决您的具体问题,但 getNavigator 和 setNavigator 似乎有点奇怪,也许考虑在构造函数中初始化它
编辑:
我想您需要传递 MainActivity,因为它将 MainNavigator 扩展到 setNavigator。在这种情况下,只需在 MainActivity 中使用 ViewModel 变量并调用
viewModel.setNavigator(this)
MainActivity 扩展 MainNavigator 和 MainViewModel 扩展 BaseViewModel 以便应该工作
推荐阅读
- ios - Cordova iOS 应用程序 AJAX POST 到 SSL 失败
- java - 如何使对话框窗口按钮被点击后做某事?
- python - 如何在不重启容器的情况下在 Docker 中重启 Python Swagger 服务器
- java - 转换为原始类型
- polymer - Polymer 测试在等待驱动程序服务器启动时失败
- postgresql - knex 交易期待一个 then
- icons - InstallShield - 指定 setup.exe 的图标
- matlab - MATLAB:函数的输出返回一个表达式,其中的变量仍未计算
- mysql - 为chart.js获取一年间隔的每个月的SUM数据
- local-storage - 如何优化加载框架中的源或资产?