如何解决我做的AlertDialog上的错误androidx.appcompat.widget.AppCompatButton cannot be thrown to android.widget.ImageView
how to resolve mistakes androidx.appcompat.widget.AppCompatButton cannot be thrown to android.widget.ImageView on the AlertDialog that I made
我尝试制作AlertDialog但是我遇到了崩溃错误的问题,我尝试了很多方法但它仍然没有用,从通过添加Id将constrainlayout更改为LinearLayout但是这个方法仍然有效
xml
<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"
android:id="@+id/parent_view"
android:padding="20dp">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardCornerRadius="5dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp">
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Cencel payment"
android:textAllCaps="true"
android:textColor="@color/color_black_000000"
app:layout_constraintEnd_toEndOf="@+id/textView10"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="@+id/textView10"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Confirm if you are sure to cancel this payment."
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/content" />
<Button
android:id="@+id/btnContonuewPayment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20sp"
android:layout_marginTop="23dp"
android:layout_marginEnd="20sp"
android:background="@drawable/bg_payment_orange_ff8830"
android:text="Continue Payment"
android:textColor="@color/color_white_FFFFFF"
app:layout_constraintEnd_toEndOf="@+id/textView10"
app:layout_constraintStart_toStartOf="@+id/textView10"
app:layout_constraintTop_toBottomOf="@+id/textView10" />
<Button
android:id="@+id/btnCancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20sp"
android:layout_marginTop="10dp"
android:layout_marginEnd="20sp"
android:background="@drawable/bg_back_to_home"
android:text="Yes, Cancel"
android:textAllCaps="false"
android:textColor="#FF8830"
app:layout_constraintEnd_toEndOf="@+id/btnContonuewPayment"
app:layout_constraintStart_toStartOf="@+id/btnContonuewPayment"
app:layout_constraintTop_toBottomOf="@+id/btnContonuewPayment" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
我通过添加 id 并将其更改为 Linearlayout 来尝试此方法,但它仍然崩溃
kotlin
private fun showDialog() {
val dialogBuilder = AlertDialog.Builder(this)
val viewDialogForget = layoutInflater.inflate(R.layout.dialog_payment,null)
val continuew = viewDialogForget.findViewById<ImageView>(R.id.btnContonuewPayment)
val cancel = viewDialogForget.findViewById<ImageView>(R.id.btnCancel)
dialogBuilder.setView(viewDialogForget)
dialogBuilder.setCancelable(false)
val dialog = dialogBuilder.create()
dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
continuew.setOnClickListener {
dialog.dismiss()
}
cancel.setOnClickListener {
finish()
}
dialog.show()
}
无需在xml中为警报对话框创建额外的按钮,它可以通过编码顺利完成。这是一个例子。
private fun setupAlertDialogButton() {
alertDialogButton.setOnClickListener {
MaterialAlertDialogBuilder(this)
.setTitle("Discard draft?")
.setMessage("Your message.")
.setPositiveButton("Discard") { dialog, which ->
Toast.makeText(this, "Clicked discard", Toast.LENGTH_SHORT).show()
}
.setNegativeButton("Cancel") { dialog, which ->
Toast.makeText(this, "Clicked cancel", Toast.LENGTH_SHORT).show()
}
.show()
}
}
alertDialogButton 应该是您的后退按钮 ID
要像弹出窗口一样显示...按照以下代码并根据您的要求在 xml 中进行必要的设计。
class Testing: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.testing)
imageButton.setOnClickListener {
setupAlertDialog()
}
}
private fun setupAlertDialog() {
var dialog = AlertDialog.Builder(this)
var inflater = this.layoutInflater
var message:View = inflater.inflate(R.layout.test_dialog,null)
dialog.setView(message)
dialog.show()
}
}
使用 inflater 将您的 xml 归档为您最初提到的
我尝试制作AlertDialog但是我遇到了崩溃错误的问题,我尝试了很多方法但它仍然没有用,从通过添加Id将constrainlayout更改为LinearLayout但是这个方法仍然有效
xml
<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"
android:id="@+id/parent_view"
android:padding="20dp">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardCornerRadius="5dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp">
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Cencel payment"
android:textAllCaps="true"
android:textColor="@color/color_black_000000"
app:layout_constraintEnd_toEndOf="@+id/textView10"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="@+id/textView10"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Confirm if you are sure to cancel this payment."
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/content" />
<Button
android:id="@+id/btnContonuewPayment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20sp"
android:layout_marginTop="23dp"
android:layout_marginEnd="20sp"
android:background="@drawable/bg_payment_orange_ff8830"
android:text="Continue Payment"
android:textColor="@color/color_white_FFFFFF"
app:layout_constraintEnd_toEndOf="@+id/textView10"
app:layout_constraintStart_toStartOf="@+id/textView10"
app:layout_constraintTop_toBottomOf="@+id/textView10" />
<Button
android:id="@+id/btnCancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20sp"
android:layout_marginTop="10dp"
android:layout_marginEnd="20sp"
android:background="@drawable/bg_back_to_home"
android:text="Yes, Cancel"
android:textAllCaps="false"
android:textColor="#FF8830"
app:layout_constraintEnd_toEndOf="@+id/btnContonuewPayment"
app:layout_constraintStart_toStartOf="@+id/btnContonuewPayment"
app:layout_constraintTop_toBottomOf="@+id/btnContonuewPayment" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
我通过添加 id 并将其更改为 Linearlayout 来尝试此方法
kotlin
private fun showDialog() {
val dialogBuilder = AlertDialog.Builder(this)
val viewDialogForget = layoutInflater.inflate(R.layout.dialog_payment,null)
val continuew = viewDialogForget.findViewById<ImageView>(R.id.btnContonuewPayment)
val cancel = viewDialogForget.findViewById<ImageView>(R.id.btnCancel)
dialogBuilder.setView(viewDialogForget)
dialogBuilder.setCancelable(false)
val dialog = dialogBuilder.create()
dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
continuew.setOnClickListener {
dialog.dismiss()
}
cancel.setOnClickListener {
finish()
}
dialog.show()
}
无需在xml中为警报对话框创建额外的按钮,它可以通过编码顺利完成。这是一个例子。
private fun setupAlertDialogButton() {
alertDialogButton.setOnClickListener {
MaterialAlertDialogBuilder(this)
.setTitle("Discard draft?")
.setMessage("Your message.")
.setPositiveButton("Discard") { dialog, which ->
Toast.makeText(this, "Clicked discard", Toast.LENGTH_SHORT).show()
}
.setNegativeButton("Cancel") { dialog, which ->
Toast.makeText(this, "Clicked cancel", Toast.LENGTH_SHORT).show()
}
.show()
}
}
alertDialogButton 应该是您的后退按钮 ID
要像弹出窗口一样显示...按照以下代码并根据您的要求在 xml 中进行必要的设计。
class Testing: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.testing)
imageButton.setOnClickListener {
setupAlertDialog()
}
}
private fun setupAlertDialog() {
var dialog = AlertDialog.Builder(this)
var inflater = this.layoutInflater
var message:View = inflater.inflate(R.layout.test_dialog,null)
dialog.setView(message)
dialog.show()
}
}
使用 inflater 将您的 xml 归档为您最初提到的