Kotlin应用程序,单击按钮以打开新活动-> IllegalStateException:findViewById不能为null

贝扎德河

我正在使用“学习Kotlin进行Android开发”这个博克游戏,并已进入第9章。我现在有2个活动。MainActivity具有在与信息按钮顶部的menue酒吧。此按钮应打开StatisticsActiv

MainActivity.kt使用调用函数onOptionsItemSelected应点击信息按钮在菜单栏等功能“openStatistics”,这会写在意向活动后调用。但这并没有发生...相反,我得到了异常:java.lang.IllegalStateException:findViewById(statisticsContainer)不能为null(完整的异常如下所示)

AndroidManifext.xml

<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/AppTheme">
    <activity android:name=".StatisticsActivity" />
    <activity
        android:name=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</application>

MainActivity.kt

class MainActivity : AppCompatActivity() {
    val rnd: RandomNumberGenerator = StdRandom()
    // or ... = RandomRandom()
    var started = false
    var number = 0
    var tries = 0
    var gameUser = GameUser(
        lastName = "Doe",
        firstName = "John",
        userName = "jdoe",
        birthday = "1900-01-01",
        registrationNumber = 0,
        userRank = 0.0
    )

    override
    fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)

        fetchSavedInstanceData(savedInstanceState)
        doGuess.setEnabled(started)
    }

    override
    fun onCreateOptionsMenu(menu: Menu): Boolean {
        val inflater: MenuInflater = menuInflater
        inflater.inflate(R.menu.menu_options, menu)
        return true
    }

    override
    fun onOptionsItemSelected(item: MenuItem): Boolean {
        val statisticsContainer = R.id.statisticsContainer
        val displayTextView: TextView = findViewById(statisticsContainer)
        openStatistics()
        displayTextView.text = "TEST"
        return super.onOptionsItemSelected(item)
    }

    private fun openStatistics() {
        val intent = Intent(this, StatisticsActivity::class.java)
        startActivity(intent)
    }

    override
    fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        putInstanceData(outState)
    }

}

我以为,如果我单击菜单栏上的信息按钮,则应使用功能“ onOptionsItemSelected”,因此应使用功能“ openStatistics”将意图写入活动。

menue_options.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/statistics"
        android:icon="@android:drawable/ic_menu_info_details"
        android:title="@string/statistics.menu_title"
        app:showAsAction="ifRoom" />
</menu>

StatisticsActivity.kt onCreate函数

override
    fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_statistics)

        restoreData(savedInstanceState)
        showData(Statistics.getStatistics())
    }

统计信息容器布局:activity_statistics.xml


<?xml version="1.0" encoding="utf-8"?>
<TextView
    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:id="@+id/statisticsContainer"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".StatisticsActivity">
</TextView>

单击信息按钮后发生异常

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: kotlinforandroid.book.numberguess, PID: 5201
    java.lang.IllegalStateException: findViewById(statisticsContainer) must not be null
        at kotlinforandroid.book.numberguess.MainActivity.onOptionsItemSelected(MainActivity.kt:55)
        at android.app.Activity.onMenuItemSelected(Activity.java:3450)
        at androidx.fragment.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:384)
        at androidx.appcompat.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:219)
        at androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
        at androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
        at androidx.appcompat.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:64)
        at androidx.appcompat.widget.Toolbar$1.onMenuItemClick(Toolbar.java:207)
        at androidx.appcompat.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:781)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:981)
        at androidx.appcompat.widget.ActionMenuView.invokeItem(ActionMenuView.java:625)
        at androidx.appcompat.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:151)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
贝扎德河

override
fun onOptionsItemSelected(item: MenuItem): Boolean {
    openStatistics()
    return super.onOptionsItemSelected(item)
}

private fun openStatistics() {
    val intent = Intent(this, StatisticsActivity::class.java)
    startActivity(intent)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android Kotlin findViewById不能为null

IllegalStateException textview使用Kotlin不能为null

无法编译应用程序java.lang.IllegalStateException:processingEnv不能为null

Kotlin视图绑定java.lang.IllegalStateException:侦听器内的视图不能为null

IllegalStateException:使用Kotlin业务逻辑的Spock单元测试不能为null

Kotlin Android扩展:java.lang.IllegalStateException:视图不能为null

Firebase Auth不能在单击按钮时启动“活动”,但是在关闭并重新打开应用程序时有效

Android:使用Kotlin的Progressbar不能为null

intent.getStringExtra不能为null kotlin

Glide Layout Null Kotlin“不能为空”

Kotlin:null不能为非null类型的值Kotlin

IllegalStateException:parcel.readString()不能为null

关闭应用程序时单击通知按钮打开活动

使用Maven运行Spring Boot应用程序时出错:参数绑定的名称不能为null

无法登录Facebook(错误-应用程序ID不能为Null)

原因:java.lang.IllegalArgumentException:应用程序上下文不能为null

无法启动springboot应用程序-资源位置不能为null

如何在GKE上的Spark应用程序中修复“ NullPointerException:projectId不能为null”?

Android Studio Kotlin:RecyclerView 不能为 Null RuntimeException

如何修复connectionManager.activeNetworkInfo不能为null?使用kotlin

为什么Kotlin内联函数参数不能为null

创建自定义 Toast 时 findViewById() 不能为 null

需要帮助查找为什么我的应用程序在单击按钮后不能离开主屏幕的原因(这应该使我进入第二个活动屏幕)

java.lang.IllegalStateException:[TextView]不能为null

单击按钮打开最近的应用程序

Websocket的Kotlin活动不能为空

如何在Android应用程序中单击按钮以打开第二个活动

单击按钮开始新活动时,我的应用程序崩溃

单击导航到新活动的按钮图标后,Android应用程序崩溃