无法从 Android 中的 EditText 检索输入文本
Unable to retrieve input text from EditText in Android
我无法从 Android 中的 EditText 检索输入文本。
这是我的代码:
package com.example.fragments2
import ...
import com.example.fragments2.databinding.FragmentLoginPageBinding
class LoginPage : Fragment()
{
lateinit var loginId:EditText
lateinit var password:EditText
lateinit var loginButton:Button
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View?
{
var binding:FragmentLoginPageBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_login_page,container,false)
var view = binding.root
loginId = view.findViewById(R.id.edittext_userid)
password = view.findViewById(R.id.edittext_password)
loginButton = view.findViewById(R.id.button_login)
val text1: String = loginId.text.toString()
val text2:String = password.text.toString()
loginButton.setOnClickListener {
Navigation.findNavController(it).navigate(LoginPageDirections.actionLoginPageToMainPage(text1,text2))
Toast.makeText(context,text1,Toast.LENGTH_SHORT).show() //<-- shows empty string
}
return view
}
}
Text1、Text2 的值始终保持 ""。
这段代码有什么问题?
text1 和 text2 始终保持您在开始时分配给它们的值。
如果想获取editText的文本,可以直接请求loginId.text.toString()
。
否则,您可以在 class 的开头创建 val text1: String = ""
。但是要更新它,您需要在 TextWatcher
内执行此操作。
看看 link
您的代码的问题是 onCreateView 仅在 Fragment 初始化时调用。但是您需要在每次文本更改时更新值。
我认为点击回调没有采用您的正确实例 TextViews
。尝试在单击按钮中获取这些值:
class LoginPage : Fragment()
{
lateinit var loginId:EditText
lateinit var password:EditText
lateinit var loginButton:Button
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View?
{
var binding:FragmentLoginPageBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_login_page,container,false)
var view = binding.root
loginId = view.findViewById(R.id.edittext_userid)
password = view.findViewById(R.id.edittext_password)
loginButton = view.findViewById(R.id.button_login)
loginButton.setOnClickListener {
val text1: String = loginId.text.toString()
val text2: String = password.text.toString()
Navigation.findNavController(it).navigate(LoginPageDirections.actionLoginPageToMainPage(text1,text2))
Toast.makeText(context,text1,Toast.LENGTH_SHORT).show() //<-- shows empty string
}
return view
}
}
注意:也许你必须用runOnUiMainThread()
调用Toast.makeText
。我已经有一段时间没做这个了。
this.runOnUiThread {
Toast.makeText(context,text1,Toast.LENGTH_SHORT).show() //<-- shows empty string
}
我无法从 Android 中的 EditText 检索输入文本。 这是我的代码:
package com.example.fragments2
import ...
import com.example.fragments2.databinding.FragmentLoginPageBinding
class LoginPage : Fragment()
{
lateinit var loginId:EditText
lateinit var password:EditText
lateinit var loginButton:Button
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View?
{
var binding:FragmentLoginPageBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_login_page,container,false)
var view = binding.root
loginId = view.findViewById(R.id.edittext_userid)
password = view.findViewById(R.id.edittext_password)
loginButton = view.findViewById(R.id.button_login)
val text1: String = loginId.text.toString()
val text2:String = password.text.toString()
loginButton.setOnClickListener {
Navigation.findNavController(it).navigate(LoginPageDirections.actionLoginPageToMainPage(text1,text2))
Toast.makeText(context,text1,Toast.LENGTH_SHORT).show() //<-- shows empty string
}
return view
}
}
Text1、Text2 的值始终保持 ""。 这段代码有什么问题?
text1 和 text2 始终保持您在开始时分配给它们的值。
如果想获取editText的文本,可以直接请求loginId.text.toString()
。
否则,您可以在 class 的开头创建 val text1: String = ""
。但是要更新它,您需要在 TextWatcher
内执行此操作。
看看 link
您的代码的问题是 onCreateView 仅在 Fragment 初始化时调用。但是您需要在每次文本更改时更新值。
我认为点击回调没有采用您的正确实例 TextViews
。尝试在单击按钮中获取这些值:
class LoginPage : Fragment()
{
lateinit var loginId:EditText
lateinit var password:EditText
lateinit var loginButton:Button
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View?
{
var binding:FragmentLoginPageBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_login_page,container,false)
var view = binding.root
loginId = view.findViewById(R.id.edittext_userid)
password = view.findViewById(R.id.edittext_password)
loginButton = view.findViewById(R.id.button_login)
loginButton.setOnClickListener {
val text1: String = loginId.text.toString()
val text2: String = password.text.toString()
Navigation.findNavController(it).navigate(LoginPageDirections.actionLoginPageToMainPage(text1,text2))
Toast.makeText(context,text1,Toast.LENGTH_SHORT).show() //<-- shows empty string
}
return view
}
}
注意:也许你必须用runOnUiMainThread()
调用Toast.makeText
。我已经有一段时间没做这个了。
this.runOnUiThread {
Toast.makeText(context,text1,Toast.LENGTH_SHORT).show() //<-- shows empty string
}