[英]EditText Inputs don't work when stored as a string,or passed in a Bundle
我正在制作一个基本表单以将用户输入发送到不同的 Activity 并在那里显示,当我使用 edittext 将输入存储在 String 变量中然后发送时发送一个空白字符串,似乎没有错误或代码中的警告可以有人帮忙,如果我将全名(参见代码)作为可编辑传递,然后使用 toString() 将其转换为字符串,则在使用 toast 测试字符串时,它可以工作,但是如果我事先将其声明为字符串然后通过再次敬酒一个空白输出这是我的 FormActivity
package com.example.formapp
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.textservice.TextInfo
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import com.google.android.material.textfield.TextInputEditText
import java.util.regex.Pattern
class FormActivity : AppCompatActivity() {
private lateinit var named:EditText
private lateinit var emailadd : EditText
private lateinit var branch : EditText
private lateinit var desc : TextInputEditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_form)
named =findViewById(R.id.name)
emailadd =findViewById(R.id.editTextTextEmailAddress)
branch=findViewById(R.id.branch)
desc =findViewById(R.id.bio)
val fullName = named.text.toString()
val email= emailadd.text
val branchName = branch.text
val biot= desc.text.toString()
val bundle = Bundle()
bundle.putString("key1", named.text.toString())
bundle.putString("email", email.toString())
bundle.putString("branch",branchName.toString())
val intent = Intent(this,DataPoint::class.java)
intent.putExtras(bundle)
val bSumit : Button =findViewById(R.id.submit)
bSumit.setOnClickListener {
val isAllinfoCorrect = Checkinfo();
if(isAllinfoCorrect)
{
startActivity(intent)
Toast.makeText(this,fullName,Toast.LENGTH_LONG).show()
}
else
{
Toast.makeText(applicationContext,"Please Enter the required fields",Toast.LENGTH_LONG).show()
}
}
}
private fun Checkinfo(): Boolean {
var text = named.text.toString()
if(text.isEmpty())
{
named.setError("Field Required")
return false
}
else
{
named.setError(null)
}
text = emailadd.text.toString()
val chekmail = "[a-zA-Z0-9._-]+@[a-z]+\\.[a-z]+"
val expression = "^[\\w.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$"
val pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE)
val matcher = pattern.matcher(text)
if(!matcher.matches() || text.isEmpty())
{
emailadd.setError("Please Enter a Valid Email")
return false
}
else
{
emailadd.setError(null)
}
text=branch.text.toString()
if(text.isEmpty())
{
branch.setError(" Field Required")
return false
}
else
{
branch.setError(null)
}
return true
}
}
这是我使用捆绑包的第二个活动
package com.example.formapp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
class DataPoint : AppCompatActivity() {
private lateinit var name : TextView
private lateinit var email : TextView
private lateinit var Branch : TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_data_point)
val bundle = intent.extras
val nmaseString= "TEST STRING"
name=findViewById(R.id.username)
email=findViewById(R.id.emailAddress)
Branch = findViewById(R.id.branchname)
name.setText(bundle?.getString("key1","THIS IS A DEFAULT VALUE"))
if (bundle != null) {
email.setText(bundle.getString("email","Default"))
Branch.setText(bundle.getString("branch","Default"))
}
}
}
用于数据点的 xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DataPoint">
<androidx.cardview.widget.CardView
android:id="@+id/card_view"
android:layout_width="350dp"
android:layout_height="300dp"
android:layout_gravity="center"
android:elevation="5dp"
android:outlineAmbientShadowColor="@color/black"
app:cardCornerRadius="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.262"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.436">
<TextView
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="0dp"
android:text="NAME"
android:textAlignment="center"
android:textSize="25sp"
android:translationY="50dp"
tools:visibility="visible"></TextView>
<TextView
android:id="@+id/emailAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:textAlignment="center"
android:translationY="100dp" />
<TextView
android:id="@+id/branchname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:textAlignment="center"
android:translationY="150dp" />
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
看来您正在提前创建 Bundle 和 Intent。 在onCreate<\/strong>中,EditText 值仍然为空。
相反,在调用startActivity<\/strong>方法之前创建 Intent 并填充 Bundle。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_form)
named =findViewById(R.id.name)
emailadd =findViewById(R.id.editTextTextEmailAddress)
branch=findViewById(R.id.branch)
desc =findViewById(R.id.bio)
val bSumit : Button =findViewById(R.id.submit)
bSumit.setOnClickListener {
val isAllinfoCorrect = Checkinfo();
if(isAllinfoCorrect)
{
val email= emailadd.text
val branchName = branch.text
val biot= desc.text.toString()
val fullName = named.text.toString()
val bundle = Bundle()
bundle.putString("key1", named.text.toString())
bundle.putString("email", email.toString())
bundle.putString("branch",branchName.toString())
val intent = Intent(this,DataPoint::class.java)
intent.putExtras(bundle)
startActivity(intent)
Toast.makeText(this,fullName,Toast.LENGTH_LONG).show()
}
else
{
Toast.makeText(applicationContext,"Please Enter the required fields",Toast.LENGTH_LONG).show()
}
}
}
移动这部分代码...
val bundle = Bundle()
bundle.putString("key1", named.text.toString())
bundle.putString("email", email.toString())
bundle.putString("branch",branchName.toString())
val intent = Intent(this,DataPoint::class.java)
intent.putExtras(bundle)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.