获取主活动之外的EditText的文本



我刚开始用Kotlin开发Android应用程序,遇到了以下问题:我想建立一个小的登录只是为了好玩。我有点认为这是由于我试图通过v.findViewItemById()获得文本,但找不到另一种方式/一种方式来绕过它
,但当执行应用程序崩溃时,我的错误
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

我MainActivity。Kt:(删除进口)


class MainActivity : AppCompatActivity(){
private lateinit var B: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
B = ActivityMainBinding.inflate(layoutInflater)
setContentView(B.root)

val btnListener = ButtonClickListener()
B.btnLogin.setOnClickListener(btnListener)
}
}

和ButtonClickListener.kt:

package de.fynnhenck.login.listener
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import de.fynnhenck.login.MainActivity
import de.fynnhenck.login.R
import java.security.AccessController.getContext
class ButtonClickListener : View.OnClickListener {
override fun onClick(v: View?) {
val bu = v as Button
val loginText = v.findViewById<TextView>(R.id.tv_loginText)
val username = v.findViewById<EditText>(R.id.et_username)
val password = v.findViewById<EditText>(R.id.et_password)
if(username.text.equals("user") and password.text.equals("pass")){
loginText.text = "Test"
}
}
}

我希望这足以解释我的问题。提前谢谢你的帮助:)

当您调用ViewfindViewById(btnLogin是您的情况)时,它尝试在降序视图之间查找。既然tv_loginText不是按钮的子视图,这一行

val loginText = v.findViewById<TextView>(R.id.tv_loginText)

设置loginTextnull

尝试通过binding访问textviews:

class MainActivity : AppCompatActivity(){
private lateinit var B: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
B = ActivityMainBinding.inflate(layoutInflater)
setContentView(B.root)

val btnListener = ButtonClickListener()
B.btnLogin.setOnClickListener(btnListener)
}
class ButtonClickListener : View.OnClickListener {
override fun onClick(v: View?) {
val bu = v as Button

val loginText = B.tvLoginText // LIKE THIS
...
}
}

我相信它的崩溃,因为onClick(v:视图?)只包含你的按钮的视图,而不是你的2其他editText和你得到null。

为什么两个文件,而不是直接在MainActivity中添加这个逻辑?

B.btnLogin.setOnClickListener {
if(B.username.text.equals("user") && B.password.text.equals("pass")){
B.loginText.text = "Test"
}
}

最新更新