findViewById 在新 Activity 中崩溃应用

findViewById Crashing App In New Activity

我在 SO 上搜索了多个类似的问题,但没有找到适合我的解决方案。我创建了一个空白 activity 并在其中包含以下代码。当 btnSignIn = findViewById(R.id.btnSignIn) 被注释掉时,应用程序运行正常。下面是我的 activity.

中的代码
class LoginActivity : AppCompatActivity() {
    private lateinit var btnSignIn: Button


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        btnSignIn = findViewById(R.id.btnSignIn) 
    }
}

不确定是否重要,但是 LoginActivity 是我在创建项目时创建的 MainActivity 之外的空白 activity。我还通过更改清单将 LoginActivity 设置为首先加载应用程序。

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.WaOCompanion">
    <activity
        android:name=".LoginActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".MainActivity"
        android:exported="true">
    </activity>
</application>

更新:添加了activity_login.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=".LoginActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="140dp"
        android:fontFamily="sans-serif-medium"
        android:text="WaO Companion"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.gms.common.SignInButton
        android:id="@+id/btnSignIn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>

显然你用错了类型。视图类型是 SignInButton 而不是 Button。改成
private lateinit var btnSignIn: SignInButton

用户 Mike M. 在评论中发现了问题。解决方案是将我的 private lateinit var btnSignIn: Button 更改为 private lateinit var: SignInButton。谢谢迈克!