单击事件在自定义弹出窗口内不起作用

问题描述

我正在使用带有 2 个 TextViews 的自定义视图的 PopupWindow,我正在尝试响应单击事件,但单击事件未触发,以下是我正在使用的代码

    /* Get the binding object */
    val binding: XYZBinding = XYZBinding.inflate(
        LayoutInflater.from(applicationContext),null,false
    )
    binding.clickHandler = this
    
    /* Set the popup menu window */
    popupWindow = PopupWindow(binding.root)
    popupWindow.contentView = LayoutInflater.from(applicationContext)
        .inflate(R.layout.popup_menu_gang,false)

    popupWindow.isTouchable = true
    popupWindow.isFocusable = true
    popupWindow.isOutsidetouchable = true
    popupWindow.width = WindowManager.LayoutParams.WRAP_CONTENT
    popupWindow.height = WindowManager.LayoutParams.WRAP_CONTENT
    popupWindow.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

    popupWindow.setondismissListener(PopupWindow.OndismissListener {
        window.attributes.alpha = alpha
        window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
        window.decorView.invalidate()
    })
    popupWindow.showAsDropDown(binding.layoutHeader.imageViewMenu)

我也尝试过直接使用 onClickListener 但效果不佳

    binding.textViewGangPopupRenameButtons.setonClickListener(View.OnClickListener {
        Toast.makeText(applicationContext,"working",Toast.LENGTH_SHORT).show()
    })

以下是我使用的xml

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

        <data>

            <import type="xyz.BaseActivity" />

            <variable
                name="clickHandler"
                type="BaseActivity" />

        </data>

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <androidx.cardview.widget.CardView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/transparent"
                android:layout_marginEnd="16dp"
                app:cardCornerRadius="16dp">

                <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">

                    <TextView
                        android:id="@+id/textViewGangPopupDelete"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:clickable="true"
                        android:focusable="true"
                        android:fontFamily="@font/montserrat_medium"
                        android:onClick="@{(view) -> clickHandler.onClick(view)}"
                        android:paddingStart="16dp"
                        android:paddingTop="16dp"
                        android:paddingEnd="16dp"
                        android:paddingBottom="8dp"
                        android:text="@string/delete"
                        android:textColor="@color/textColorBlue"
                        android:textSize="14sp"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent" />

                    <TextView
                        android:id="@+id/textViewGangPopupRenameButtons"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:clickable="true"
                        android:focusable="true"
                        android:fontFamily="@font/montserrat_medium"
                        android:onClick="@{(view) -> clickHandler.onClick(view)}"
                        android:paddingStart="16dp"
                        android:paddingTop="8dp"
                        android:paddingEnd="16dp"
                        android:paddingBottom="16dp"
                        android:text="@string/rename_buttons"
                        android:textColor="@color/textColorBlue"
                        android:textSize="14sp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/textViewGangPopupDelete" />

                </androidx.constraintlayout.widget.ConstraintLayout>

            </androidx.cardview.widget.CardView>
        </FrameLayout>


    </layout>

解决方法

使用 PopupView 设置文本视图的 ID .. 像这样

      ` val layoutInflater = activity!!
                .getSystemService(AppCompatActivity.LAYOUT_INFLATER_SERVICE) as 
           LayoutInflater
            val popupView: View = 
      layoutInflater.inflate(R.layout.custom_grid_bottomnav,null)
            val popupWindow = PopupWindow(
                popupView,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT
            )

            // popupWindow.dismiss()
            val tx = popupView.findViewById<TextView>(R.id.text1) //change
            tx.setOnClickListener(object : View.OnClickListener {
                override fun onClick(v: View?) {
                   //Do what you want

} }`