java.lang.ClassCastException: com.example.readdoang.ui.login_regist_activity.LoginRegistActivity 无法转换为 com
java.lang.ClassCastException: com.example.readdoang.ui.login_regist_activity.LoginRegistActivity cannot be cast to com
你好我是 android
的新人
我在 MVP 结构上实现导航图时出错,我不知道如何解决,我的问题是如何从视图片段调用演示器 class
这是我的片段class
class RegisterFragment : Fragment(), RegisterView.View {
private lateinit var presenter : RegisterView.Presenter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.fragment_register, container, false)
buttonAction(root)
return root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
private fun buttonAction(root: View) {
val name: String = root.txt_email.text.toString()
val email: String = root.txt_name.text.toString()
val password: String = root.txt_password.text.toString()
presenter = (activity as RegisterView.Presenter?)!!
root.btnSignUp.setOnClickListener {
presenter.sendData(name, email, password)
}
}
override fun onDataRegisterComplete(response: User) {
Log.d("Reponse : ", "$response")
}
override fun onDataRegisterFailure(throwable: Throwable) {
Log.d("Response : ", "$throwable")
}
}
这是我的查看界面
interface RegisterView {
interface View {
fun onDataRegisterComplete(response: User)
fun onDataRegisterFailure(throwable: Throwable)
}
interface Presenter {
fun sendData(email: String, name: String, password: String)
}
}
这是我的主持人
class RegisterPresenter(context : Context?) : RegisterView.Presenter {
private val regist = context as RegisterView.View
override fun sendData(name: String, email: String, password: String) {
}
}
我还没有在演示者中做任何事情
这是我从日志中得到的错误信息
java.lang.ClassCastException: com.example.readdoang.ui.login_regist_activity.LoginRegistActivity cannot be cast to com.example.readdoang.ui.register_activity.RegisterView$Presenter
at com.example.readdoang.ui.register_activity.RegisterFragment.buttonAction(RegisterFragment.kt:37)
at com.example.readdoang.ui.register_activity.RegisterFragment.onCreateView(RegisterFragment.kt:24)
谢谢
在您的 class RegisterFragment 中,覆盖 onCreateView(),在此方法中,您可以像这样将视图(片段)传递给演示者:
presenter = RegisterPresenter(this)
你的主持人应该会喜欢这个:
class RegisterPresenter(internal val view: RegisterView.View) : RegisterView.Presenter
你好我是 android
的新人我在 MVP 结构上实现导航图时出错,我不知道如何解决,我的问题是如何从视图片段调用演示器 class
这是我的片段class
class RegisterFragment : Fragment(), RegisterView.View {
private lateinit var presenter : RegisterView.Presenter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.fragment_register, container, false)
buttonAction(root)
return root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
private fun buttonAction(root: View) {
val name: String = root.txt_email.text.toString()
val email: String = root.txt_name.text.toString()
val password: String = root.txt_password.text.toString()
presenter = (activity as RegisterView.Presenter?)!!
root.btnSignUp.setOnClickListener {
presenter.sendData(name, email, password)
}
}
override fun onDataRegisterComplete(response: User) {
Log.d("Reponse : ", "$response")
}
override fun onDataRegisterFailure(throwable: Throwable) {
Log.d("Response : ", "$throwable")
}
}
这是我的查看界面
interface RegisterView {
interface View {
fun onDataRegisterComplete(response: User)
fun onDataRegisterFailure(throwable: Throwable)
}
interface Presenter {
fun sendData(email: String, name: String, password: String)
}
}
这是我的主持人
class RegisterPresenter(context : Context?) : RegisterView.Presenter {
private val regist = context as RegisterView.View
override fun sendData(name: String, email: String, password: String) {
}
}
我还没有在演示者中做任何事情
这是我从日志中得到的错误信息
java.lang.ClassCastException: com.example.readdoang.ui.login_regist_activity.LoginRegistActivity cannot be cast to com.example.readdoang.ui.register_activity.RegisterView$Presenter
at com.example.readdoang.ui.register_activity.RegisterFragment.buttonAction(RegisterFragment.kt:37)
at com.example.readdoang.ui.register_activity.RegisterFragment.onCreateView(RegisterFragment.kt:24)
谢谢
在您的 class RegisterFragment 中,覆盖 onCreateView(),在此方法中,您可以像这样将视图(片段)传递给演示者:
presenter = RegisterPresenter(this)
你的主持人应该会喜欢这个:
class RegisterPresenter(internal val view: RegisterView.View) : RegisterView.Presenter