“这是我的自定义警告对话框,当我运行这个应用程序时,它会显示按钮,然后我点击那个按钮,很不幸,它显示停止了。不幸的是,当我点击按钮时,应用程序已经停止了。我找了很多次,但没有找到任何解决办法。
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
<?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" />
</LinearLayoutMainActivity.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()
}
}
}
}这个错误逻辑
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)谢谢
发布于 2022-06-04 21:01:50
我相信是因为你没有正确初始化你的按钮。
就在onCreate方法添加private lateinit var btnKenalan: Button之前。然后将val btnKenalan = findViewById<Button>(R.id.btnKenalan)更改为btnKenalan = findViewById(R.id.btnKenalan
您的代码现在应该如下所示:
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()https://stackoverflow.com/questions/72499015
复制相似问题