我在我的应用程序中使用带有导航的 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/