按钮点击开关按钮下的代码不工作



Button单击时,只有当"切换"按钮为ON时,我才想从编辑文本中获取第二个activity的数据,但无法做到这一点,任何人都可以帮助我解决此问题。感谢

主活动.kt

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val nextButton = findViewById<Button>(R.id.nextButton)
nextButton.setOnClickListener {
nextPage()
}
}
private fun nextPage(){
val etName = findViewById<EditText>(R.id.name)
val etEmail = findViewById<EditText>(R.id.email)
val etPhone = findViewById<EditText>(R.id.phone)
val etPassPort = findViewById<CheckBox>(R.id.checkbox)
var passport = ""
if (etPassPort.isChecked) { passport = etPassPort.text.toString()  }
val mName = etName.text.toString()
val mEmail = etEmail.text.toString()
val mPhone = etPhone.text.toString()
val intent = Intent(this@MainActivity, ViewActivity::class.java)
intent.putExtra("Name", mName)
intent.putExtra("Email", mEmail)
intent.putExtra("Phone", mPhone)
intent.putExtra("CHECKBOX", passport)
val mySwitch = findViewById<SwitchCompat>(R.id.mySwitch)
mySwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
val et = findViewById<EditText>(R.id.sponsorName)
val mEt = et.text.toString()
intent.putExtra("SPONSOR", mEt)
}
}
startActivity(intent)
}
}

第二活动.kt

class ViewActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_view)
val intent =  intent
val mName = intent.getStringExtra("Name")
val mEmail = intent.getStringExtra("Email")
val mPhone = intent.getStringExtra("Phone")
val checkbox = intent.getStringExtra("CHECKBOX")
val mEt = intent.getStringExtra("SPONSOR")
//textview
val resultTv = findViewById<View>(R.id.resultTV) as TextView
//setText
resultTv.text = mName+"n"+mEmail+"n"+mPhone+"n"+checkbox+"n"+mEt
}
}

当我从按钮点击中释放开关按钮代码时,它运行良好。在按钮点击下,输出中只显示空值。

我通过全局声明Switch Button来解决它的问题,这是我的工作代码。

主活动.kt

class MainActivity : AppCompatActivity() {
var sponsor : Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val mySwitch = findViewById<SwitchCompat>(R.id.mySwitch)
mySwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
sponsor = true
}
}
val nextButton = findViewById<Button>(R.id.nextButton)
nextButton.setOnClickListener {
nextPage()
}
}
private fun nextPage(){
val etName = findViewById<EditText>(R.id.name)
val etEmail = findViewById<EditText>(R.id.email)
val etPhone = findViewById<EditText>(R.id.phone)
val etPassPort = findViewById<CheckBox>(R.id.checkbox)
var passport = ""
if (etPassPort.isChecked) { passport = etPassPort.text.toString()  }
val mName = etName.text.toString()
val mEmail = etEmail.text.toString()
val mPhone = etPhone.text.toString()
val intent = Intent(this@MainActivity, ViewActivity::class.java)
val et = findViewById<EditText>(R.id.sponsorName)
val mEt = et.text.toString()
intent.putExtra("SPONSOR", mEt)
intent.putExtra("Name", mName)
intent.putExtra("Email", mEmail)
intent.putExtra("Phone", mPhone)
intent.putExtra("CHECKBOX", passport)
intent.putExtra("Switch",sponsor.toString())
startActivity(intent)}}

第二活动.kt

class ViewActivity : AppCompatActivity() {
private lateinit var pdfButton: Button
private var permissionCode = 101
private val STORAGE_CODE: Int = 100
val resultTv = findViewById<View>(R.id.resultTV) as TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_view)
val intent = intent
val mName = intent.getStringExtra("Name")
val mEmail = intent.getStringExtra("Email")
val mPhone = intent.getStringExtra("Phone")
val checkbox = intent.getStringExtra("CHECKBOX")
val mEt = intent.getStringExtra("SPONSOR")
val sponsor1 = intent.getStringExtra("Switch")
//textview
//setText
resultTv.text =
mName + "n" + mEmail + "n" + mPhone + "n" + checkbox + "n" + mEt + "n" + sponsor1
if (sponsor1 == "true") {
resultTv.text = mName + "n" + mEmail + "n" + mPhone + "n" + checkbox + "n" + mEt
} else {
resultTv.text = mName + "n" + mEmail + "n" + mPhone + "n" + checkbox
}

我知道问题出在哪里,首先你调用buttonCLick,然后在它内部调用方法nextPage((,如果我们仔细观察,这段代码

val mySwitch = findViewById<SwitchCompat>(R.id.mySwitch)
mySwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
val et = findViewById<EditText>(R.id.sponsorName)
val mEt = et.text.toString()
intent.putExtra("SPONSOR", mEt)
}

}

在您的点击按钮内,默认情况下您的开关未选中,因此您传递了所有数据,但intent.putExtra("SPONSOR", mEt)未执行,因此当第二个活动接收到数据时,由于val mEt = intent.getStringExtra("SPONSOR")为null,数据显示为null错误。您有两个解决方案,要么在单击按钮外编写开关代码块,要么在第二个活动中使用条件检查所有数据是否为空。

最新更新