简体   繁体   English

不幸的是,当我单击按钮时,应用程序已停止

[英]App unfortunately has stopped when i click the button

`Here is my custom alert dialog, when i run the app it show the button then i click that, it show unfortunately stopped . `这是我的自定义警报对话框,当我运行应用程序时,它会显示按钮,然后我单击它,但不幸的是它显示已停止。 App unfortunately has stopped when i click the button.不幸的是,当我单击按钮时,应用程序已停止。 I searched a lot and I did not find any solution.我搜索了很多,但没有找到任何解决方案。

activity_main.xml activity_main.xml

<?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 layout_alert_dialog.xml

<?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 MainActivity.kt

    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()
            }
        }
    }
}

and this error logcat和这个错误日志猫

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)

thank you谢谢你

I believe it's because you didn't initialize your button correctly.我相信这是因为您没有正确初始化按钮。

Just before onCreate method add private lateinit var btnKenalan: Button .onCreate方法之前添加private lateinit var btnKenalan: Button Then change val btnKenalan = findViewById<Button>(R.id.btnKenalan) to btnKenalan = findViewById(R.id.btnKenalan然后将val btnKenalan = findViewById<Button>(R.id.btnKenalan)更改为btnKenalan = findViewById(R.id.btnKenalan

Your code should now look like this:您的代码现在应该如下所示:

 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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM