首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不幸的是,当我点击按钮时,应用程序已经停止了。

不幸的是,当我点击按钮时,应用程序已经停止了。
EN

Stack Overflow用户
提问于 2022-06-04 10:30:53
回答 1查看 37关注 0票数 0

“这是我的自定义警告对话框,当我运行这个应用程序时,它会显示按钮,然后我点击那个按钮,很不幸,它显示停止了。不幸的是,当我点击按钮时,应用程序已经停止了。我找了很多次,但没有找到任何解决办法。

activity_main.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btnKenalan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Klik di Sini Untuk Kenalan"
        tools:ignore="HardcodedText" />

</LinearLayout>

layout_alert_dialog.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:ignore="LabelFor">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/etNama"
        android:hint="Masukkan nama anda di sini..."
        android:padding="20dp"
        android:layout_margin="10dp"
        android:autofillHints="no"
        android:inputType="text"
        tools:ignore="HardcodedText" />

</LinearLayout

MainActivity.kt

代码语言:javascript
复制
    package com.example.custom_alert_dialog

import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.*
import androidx.appcompat.app.AlertDialog

class MainActivity : AppCompatActivity() {
    @SuppressLint("InflateParams")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btnKenalan = findViewById<Button>(R.id.btnKenalan)

        btnKenalan.setOnClickListener{
            val inflateView = layoutInflater.inflate(R.layout.layout_alert_dialog, null)
            val etNama = inflateView.findViewById<EditText>(R.id.etNama)
            val alb = AlertDialog.Builder(this@MainActivity)
            with(alb) {
                setTitle("Mau kenalan?")
                setIcon(R.drawable.maskot_kotlin)
                setView(inflateView)
                setCancelable(false)
                setPositiveButton("Selesai") { _, _ ->
                    val nama = if ("${etNama.text}".isNotEmpty()) "${etNama.text}" else "orang asing"
                    Toast.makeText(this@MainActivity, "Salam kenal, $nama!" , Toast.LENGTH_SHORT).show()
                }
                setNegativeButton("Siape lu?") { _, _ ->
                    Toast.makeText(this@MainActivity, "Sombong amat sih!", Toast.LENGTH_SHORT).show()
                }
                setNeutralButton("Maaf, cuma numpang lewat", null)
                create().show()
            }
        }
    }
}

这个错误逻辑

代码语言:javascript
复制
Process: com.example.custom_alert_dialog, PID: 3964
    android.content.res.Resources$NotFoundException: Resource ID #0x7f070075
        at android.content.res.Resources.getValue(Resources.java:1266)
        at androidx.appcompat.widget.ResourceManagerInternal.loadDrawableFromDelegates(ResourceManagerInternal.java:252)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:139)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:132)
        at androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104)
        at androidx.appcompat.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:90)
        at androidx.appcompat.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:98)
        at androidx.appcompat.app.AlertController.setupTitle(AlertController.java:696)
        at androidx.appcompat.app.AlertController.setupView(AlertController.java:488)
        at androidx.appcompat.app.AlertController.installContent(AlertController.java:233)
        at androidx.appcompat.app.AlertDialog.onCreate(AlertDialog.java:279)
        at android.app.Dialog.dispatchOnCreate(Dialog.java:373)
        at android.app.Dialog.show(Dialog.java:274)
        at com.example.custom_alert_dialog.MainActivity.onCreate$lambda-3(MainActivity.kt:34)
        at com.example.custom_alert_dialog.MainActivity.$r8$lambda$Xw0rK5YPxl01CTZVbWM_lM-eURY(MainActivity.kt)
        at com.example.custom_alert_dialog.MainActivity$$ExternalSyntheticLambda2.onClick(Unknown Source)
        at android.view.View.performClick(View.java:4780)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-06-04 21:01:50

我相信是因为你没有正确初始化你的按钮。

就在onCreate方法添加private lateinit var btnKenalan: Button之前。然后将val btnKenalan = findViewById<Button>(R.id.btnKenalan)更改为btnKenalan = findViewById(R.id.btnKenalan

您的代码现在应该如下所示:

代码语言:javascript
复制
 class MainActivity : AppCompatActivity() {
    @SuppressLint("InflateParams")

    private lateinit var btnKenalan: Button

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

        btnKenalan = findViewById(R.id.btnKenalan)

        btnKenalan.setOnClickListener{
            val inflateView = layoutInflater.inflate(R.layout.layout_alert_dialog, null)
            val etNama = inflateView.findViewById<EditText>(R.id.etNama)
            val alb = AlertDialog.Builder(this@MainActivity)
            with(alb) {
                setTitle("Mau kenalan?")
                setIcon(R.drawable.maskot_kotlin)
                setView(inflateView)
                setCancelable(false)
                setPositiveButton("Selesai") { _, _ ->
                    val nama = if ("${etNama.text}".isNotEmpty()) "${etNama.text}" else "orang asing"
                    Toast.makeText(this@MainActivity, "Salam kenal, $nama!" , Toast.LENGTH_SHORT).show()
                }
                setNegativeButton("Siape lu?") { _, _ ->
                    Toast.makeText(this@MainActivity, "Sombong amat sih!", Toast.LENGTH_SHORT).show()
                }
                setNeutralButton("Maaf, cuma numpang lewat", null)
                create().show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72499015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档