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