android-fragments 将视图传递到第二个片段屏幕时,无法正确显示视图

xxe27gdn  于 2022-11-13  发布在  Android
关注(0)|答案(2)|浏览(152)

当我尝试显示2个输入视图时,我收到一个错误。它们被捕获在一个片段屏幕中,然后我尝试在第二个片段屏幕上显示它们。导航工作正常,但它们显示为资源?...我甚至不知道它叫什么。
这是调用该屏幕的setOnClickListener。我怀疑它与safeArgs一起使用

binding.buttonConfirm.setOnClickListener{
    val username = binding.editTextUsername.toString()
    val password = binding.editTextPassword.toString()
    val action = LoginFragmentDirections.actionLoginFragmentToWelcomeFragment(username, password) // this is generated class due to nav graph
    findNavController().navigate(action)
}

在调试器中,我添加了一些监视

我是一个新手到Android,并以stackoverflow作为海报。谢谢任何帮助

hrirmatl

hrirmatl1#

你在EditText上调用toString(),但实际上并没有得到用户输入的文本--要做到这一点,你需要调用getText(),在Kotlin代码中,你可以通过text属性来实现:

val username = binding.editTextUsername.text.toString()
val password = binding.editTextPassword.text.toString()
val action = LoginFragmentDirections.actionLoginFragmentToWelcomeFragment(username, password) // this is generated class due to nav graph
findNavController().navigate(action)
ncecgwcz

ncecgwcz2#

您正在获取视图本身而不是它的值。为此,请获取值,而不是视图。

binding.buttonConfirm.setOnClickListener{
val username = binding.editTextUsername.text.toString()
val password = binding.editTextPassword.text.toString()
val action = LoginFragmentDirections.actionLoginFragmentToWelcomeFragment(username, password) // this is generated class due to nav graph
    findNavController().navigate(action)
}

或者,您可以使用Bundle对象在目标之间传递数据。

创建一个Bundle对象,并使用navigate()将其传递给目标,如下所示:

val bundle = Bundle()
bundle.putString("username", binding.editTextUserName.text.toString())
bundle.putString("password", binding.editTextPassword.text.toString())
view.findNavController().navigate(R.id.actionLoginFragmentToWelcomeFragment, bundle)

在接收目的地的程式码中,使用getArguments()方法撷取Bundle并使用其内容:

binding.textViewUserName.text = arguments?.getString("username")
binding.textViewPassword.text =arguments?.getString("password")

相关问题