android - 绑定(bind)无法转换为导航时的绑定(bind)错误

标签 android kotlin

我在我的应用程序中使用带有导航的 fragment 。我有 mainFragment 类和 adminPwdFragment 类。我想通过按界面上的按钮从 mainFragment 转到 adminPwdFragment。但是我在点击按钮时总是会出现这个错误:

2020-05-16 17:12:53.302 1423-1423/com.example.lejosremote E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.lejosremote, PID: 1423 java.lang.ClassCastException: com.example.lejosremote.databinding.MainFragmentBindingImpl cannot be cast to com.example.lejosremote.databinding.AdminPwdFragmentBinding at com.example.lejosremote.admin_pwd.onCreateView(admin_pwd.kt:20) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185) at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2222) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1995) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1951) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847) at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)



这是类(class)
class MainFragment : Fragment() {

private lateinit var viewModel: MainViewModel

private lateinit var binding: MainFragmentBinding

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View {
    // Inflate view and obtain an instance of the binding class
    binding = DataBindingUtil.inflate(
        inflater,
        R.layout.main_fragment,
        container,
        false
    )

    //        ligne pour créer le ViewModel une seule fois
    viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

    binding.mainViewModel = viewModel
    binding.lifecycleOwner = this

    viewModel.eventAdmin.observe(viewLifecycleOwner, Observer { admin ->
        if (admin) {
            findNavController().navigate(MainFragmentDirections.actionMainFragmentToAdminPwd())
        }
    })

    return binding.root
}

admin_pwd 用于另一个 fragment :
class admin_pwd : Fragment() {

private lateinit var viewModel: AdminPwdViewModel
private lateinit var viewModelFactory: AdminPwdViewModelFactory

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
    val binding: AdminPwdFragmentBinding = DataBindingUtil.inflate(
        inflater,
        R.layout.main_fragment,
        container,
        false
    )


    viewModelFactory = AdminPwdViewModelFactory()
    viewModel = ViewModelProviders.of(this).get(AdminPwdViewModel::class.java)

    binding.mainViewModel = viewModel
    binding.lifecycleOwner = this
    return binding.root
}

我究竟做错了什么 ?我怎样才能摆脱这个错误并使导航发生?

最佳答案

admin_pwd 中进行更改分段

 val binding: AdminPwdFragmentBinding = DataBindingUtil.inflate(
        inflater,
        R.layout.main_fragment,
        container,
        false
    )


val binding: AdminPwdFragmentBinding = DataBindingUtil.inflate(
        inflater,
        R.layout.admin_pwd_fragment,
        container,
        false
    )

关于android - 绑定(bind)无法转换为导航时的绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61839241/

相关文章:

android - 如何将字体样式添加到TextView Android Kotlin

android - 未解析的引用 : databinding in Android studio 4. 1.3

kotlin - 为什么我不能在插件{}中使用val?

android - 尝试执行看似有效的显式转换时发生 ClassCastException

android - Android Studio 的目录在哪里?

android - SQLite 异常无法将 BLOB 转换为字符串

android - android 抽屉导航上的 popBackStack()

kotlin - 在 session 室数据库中使用 'like'搜索加密的文本

android - Jetpack 撰写 : how to reset LazyListState?

functional-programming - 使用arrow-kt的列表理解时的ClassCastException