【问题标题】:setOnclicklistener in a listview with a customadapter带有 customadapter 的列表视图中的 setOnclicklistener
【发布时间】:2018-04-17 13:54:04
【问题描述】:

我刚开始使用带有 Kotlin 的 Android Studio。 我用自定义适配器实现了一个 listView,但我不明白当我点击这个 listview 的一个项目时如何检测。

这是我的课程 CalAdapter.kt

class CalAdapter(context: Context,al_session:ArrayList<activity_session>) : BaseAdapter(){

private val mInflator: LayoutInflater
private val al_session:ArrayList<activity_session>

init {
    this.mInflator = LayoutInflater.from(context)
    this.al_session=al_session
}

override fun getCount(): Int {
    return al_session.size
}

override fun getItem(position: Int): Any {
    return al_session.get(position)
}

override fun getItemId(position: Int): Long {
    return position.toLong()
}

@SuppressLint("ResourceAsColor", "PrivateResource")
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? {
    val view: View?
    val vh: ListRowHolder
    if (convertView == null) {
        view = this.mInflator.inflate(R.layout.calendar_adapter, parent, false)
        vh = ListRowHolder(view)
        view.tag = vh
    } else {
        view = convertView
        vh = view.tag as ListRowHolder
    }

    vh.label.text = al_session[position].id.toString()
    vh.ivImage.setBackgroundColor(R.color.material_blue_grey_800)
    when (al_session[position].provided_sport)
    {
        "swimming" ->
        {
            //vh.ivImage.setBackgroundColor(R.color.material_blue_grey_800)
            vh.ivImage.setImageResource(R.drawable.ic_swiming)

        }
        "running" ->
        {
            //vh.ivImage.setBackgroundColor(R.color.white)
            vh.ivImage.setImageResource(R.drawable.ic_running)
        }
        "cycling" ->
        {
            //vh.ivImage.setBackgroundColor(R.color.material_blue_grey_800)
            vh.ivImage.setImageResource(R.drawable.ic_bicycle)
        }
    }
    return view
}



}

private class ListRowHolder(row: View?) {
val label: TextView = row?.findViewById(R.id.TWActivityID) as TextView
val ivImage: ImageButton = row?.findViewById(R.id.CalActivityButton) as ImageButton

}

这是我实现列表视图的功能。

lv 是我的列表视图。

fun createActivities()
{
    val lv = dynamicList
    val test=ArrayList<activity_session>()
    var i : Int = 0
    while (i < 5) {
        if (ActivityList.activityList[i] != null) {
            test.add(ActivityList.activityList[i])
        }
        i += 1
    }
    val obj_adapter: CalAdapter
    obj_adapter = CalAdapter(this.view!!.dynamicList.context, test)
    lv.adapter=obj_adapter
}

我创建了一个代表我的列表视图的 xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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">

    <LinearLayout
        android:id="@+id/AdapterLayout"
        android:layout_width="215dp"
        android:layout_height="140dp"
        android:orientation="horizontal"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ImageButton
            android:id="@+id/CalActivityButton"
            android:layout_width="wrap_content"
            android:layout_height="140dp"
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_info_black_24dp" />

        <TextView
            android:id="@+id/TWActivityID"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:text="TextView"
            android:visibility="invisible"
            tools:layout_editor_absoluteX="92dp"
            tools:layout_editor_absoluteY="230dp" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

有人可以解释我如何检测我何时单击刚刚创建的列表视图的项目吗?

编辑:您好,我再次了解如何做到这一点,我在 CalAdapter.kt 类中的 imagebutton 中添加了一个 setOnClickListener 方法

现在看起来像这样:https://imgur.com/a/Vw9SD

【问题讨论】:

    标签: android listview kotlin


    【解决方案1】:

    在您的活动中,您应该向列表视图添加一个侦听器。

     list.setOnItemClickListener { parent, view, position, id ->
         val myItem = parent.getItemAtPosition(position) as MyDataObj
     }
    

    您还应该在适配器上正确填写 getItem() 方法。

    【讨论】:

    • 您好,我不确定我是否理解正确。如果我想检测何时单击 imageButton,MyDataObj 类似于 ImageButton?
    • 他说你应该在列表视图中添加一个item click listener
    • @NicolasFelten MyDataObj 应该是您的活动会话
    • 再次嗨,所以我更改了我的函数并在我的函数 fun createActivies() 中添加了 lv.setOnItemClickListener,我尝试使用 Log.d() 在控制台中显示某些内容,但没有出现任何内容..这是一个屏幕:imgur.com/a/Ir93K
    • dynamicList 它是一个 ListView 对象吗?另外,您的“代表列表视图的 xml 文件”是指代表行吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多