stackoverflow!我是安卓开发的新手,我正试图弄清楚安卓中的Fragments。我在 activity_main.xml 中创建了一个 FrameLayout
<FrameLayout
android:id="@+id/mainFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
而在MainActivity的onCreate方法中,我试图将LoginFragment传递给FrameLayout。下面是MainActivity的代码。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
showFragment(LoginFragment())
passwordInput.addTextChangedListener(
object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(p0: Editable?) {
logInButton.isEnabled =
passwordInput.text.isNotBlank() && loginInput.text.isNotBlank()
loginInput.addTextChangedListener(
object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(p0: Editable?) {
logInButton.isEnabled =
passwordInput.text.isNotBlank() && loginInput.text.isNotBlank()
logInButton.setOnClickListener {
showFragment(LoginFragment())
private fun showFragment(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.mainFragment, fragment)
.commit()
LoginFragment的代码。
【替换代码2
还有fragment_login.xml文件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/loginInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="80dp"
android:layout_marginEnd="40dp"
android:autofillHints="username"
android:hint="@string/enter_login"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/passwordInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="40dp"
android:layout_marginBottom="20dp"
android:autofillHints="password"
android:hint="@string/enter_password"
android:inputType="textPassword" />
<Button
android:id="@+id/logInButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:enabled="false"
android:text="@string/log_in" />
</LinearLayout>
I got the null pointer:
原因是: java.lang.NullPointerException。试图对一个空对象引用调用虚拟方法'void android.widget.EditText.addTextChangedListener(android.text.TextWatcher)'。
at com.example.fragmentactivity.MainActivity.onCreate(MainActivity.kt:18)
我真的不明白哪里出了问题。它说我试图引用一个空的视图,但所有这些视图都是viewBinded的,而且在IDE中它们显示的是它们应该有的样子。感谢所有的提示和答案。