无法设置OnItemClickListener ListView Kotlin

问题描述

我已经在ListView中实现了自定义适配器,但是当我尝试使用setonItemClickListener时,该功能不起作用。我尝试用烤面包片通知我点击是否响应,但它不起作用

这是我的活动和适配器

class PasswordListActivity : AppCompatActivity() {
    private lateinit var dataSource: SavedPasswordDB

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

        user = intent.getSerializableExtra("loggedUser") as User

        loadPasswords()

        btAddOpt.setonClickListener {
            // ...
        }
    }

    override fun onPause() {
        super.onPause()
        this.loadPasswords()
    }

    override fun onResume() {
        super.onResume()
        this.loadPasswords()
    }

    internal class CustomAdapter(context: Context,data: List<SavedPassword>): ArrayAdapter<SavedPassword>(context,R.layout.activity_password_list,data) {
        @SuppressLint("ViewHolder","SetTextI18n")
        private lateinit var dataSource: SavedPasswordDB

        override fun getView(position: Int,convertView: View?,parent: ViewGroup): View {
            val inflater = LayoutInflater.from(context).inflate(R.layout.custom_row,parent,false)

            val pwd = getItem(position)

            dataSource = SavedPasswordDB(context)

            inflater.tvTitle.text = pwd!!.fromTitle
            inflater.tvUser.text = "User: " + pwd.pwdUser
            inflater.tvCont.text = "Password: " + pwd.pwdContent
            inflater.tvOptLink.text = "Site link: " + pwd.optionalLink
            inflater.tvCreated.text = "Created At: " + pwd.createdAt


            inflater.btDeleteCurrent.setonClickListener {
                // ...
            }

            return inflater
        }
    }

    private fun loadPasswords () {
        dataSource = SavedPasswordDB(this)

        var passwords = mutablelistof<SavedPassword>()

        val cursor = dataSource.selectPwdByUser(user.id)

        while (cursor.movetoNext()) {
            val col = SavedPassword(cursor.getInt(0),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getInt(6))
            passwords.add(col)
        }

        val adapter = CustomAdapter(this,passwords)
        lvPwds.adapter = adapter

        lvPwds.setonItemClickListener { adapterView,view,i,id ->
            val intent = Intent(this,PasswordDetailActivity::class.java)
            startActivity(intent)
        }
    }
}

此外,我还认为错误可能出在XML文件中,也许有一个属性可能会丢失,所以它们是:

ListView活动:

<ListView
    android:id="@+id/lvPwds"
    android:layout_width="353dp"
    android:layout_height="593dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/btAddOpt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.87"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.90999997"
    android:src="@drawable/add_icon"/>

自定义适配器:

<LinearLayout
    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:padding="15dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <LinearLayout
                android:layout_width="260dp"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/tvTitle"
                    android:layout_width="35dp"
                    android:layout_height="wrap_content"
                    android:text="@string/site"
                    android:textColor="#000000"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.046"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

                <TextView
                    android:id="@+id/tvUser"
                    android:layout_width="61dp"
                    android:layout_height="wrap_content"
                    android:text="@string/userc"
                    app:layout_constraintStart_toStartOf="@+id/tvTitle"
                    app:layout_constraintTop_toBottomOf="@+id/tvTitle" />

                <TextView
                    android:id="@+id/tvCont"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/content"
                    app:layout_constraintStart_toStartOf="@+id/tvTitle"
                    app:layout_constraintTop_toBottomOf="@+id/tvTitle" />

                <TextView
                    android:id="@+id/tvOptLink"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/optional_link"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="@+id/tvTitle"
                    app:layout_constraintTop_toBottomOf="@+id/tvCont"
                    app:layout_constraintVertical_bias="0.043" />

                <TextView
                    android:id="@+id/tvCreated"
                    android:layout_width="wrap_content"
                    android:layout_height="27dp"
                    android:text="@string/created_at"
                    app:layout_constraintStart_toStartOf="@+id/tvUser"
                    app:layout_constraintTop_toBottomOf="@+id/tvUser" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <ImageButton
                    android:id="@+id/btDeleteCurrent"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.952"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:srcCompat="@android:drawable/ic_delete" />
            </LinearLayout>

        </LinearLayout>
    </LinearLayout>

</LinearLayout>

解决方法

将以下行添加到xml中的ListViewtag-

android:descendantFocusability="blocksDescendants"  

它将为您提供帮助。