Я только начал использовать Android studio с Kotlin. Я реализовал 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>

Может ли кто-нибудь объяснить мне, как определить, когда я нажимаю на элемент только что созданного списка?

РЕДАКТИРОВАТЬ: Привет, снова я понял, как это сделать, я добавил метод setOnClickListener в свой imagebutton в моем классе CalAdapter.kt

Теперь это выглядит так: https://imgur.com/a/Vw9SD

0
Nicolas Felten 17 Апр 2018 в 16:54

1 ответ

Лучший ответ

В своей деятельности вы должны добавить слушателя в список.

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

Вы также должны правильно заполнить метод getItem () на вашем адаптере, как и вы.

Попытайся!

Надеюсь, это поможет!

0
axierjhtjz 17 Апр 2018 в 14:01