setOnLongClickListener в kotlin android

Как я могу использовать setOnClickListener в каждом элементе моего ListView?

мой xml:

<ListView
    android:id="@+id/tv1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

</ListView>

person Nour Medhat    schedule 20.08.2017    source источник


Ответы (2)


в вашей активности котлина:

override fun onCreate(savedInstanceState: Bundle?) {
  val listView: ListView = findViewById(R.id.yourListViewId)
  listView.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, i, l -> 
    //YOUR CODE HERE
  }
}
person Dreamers Org    schedule 20.08.2017
comment
Он просил каждый предмет - person Martin De Simone; 20.08.2017
comment
я хочу для каждого предмета - person Nour Medhat; 21.08.2017
comment
OnItemClickListener предназначен для каждого элемента. Переменная «i» в методе — это позиция каждого элемента. Вы просто используете yourItemList.get(i) для получения элемента для работы. Это рекомендуемый способ сделать это. Вы также можете использовать OnClickListener в своем адаптере, но это увеличивает использование памяти. - person Dreamers Org; 22.08.2017
comment
когда я использовал этот метод в адаптере, он не работал. где я могу его использовать, если он не работает в адаптере ?? - person Nour Medhat; 22.08.2017
comment
Вы должны использовать его в действии, где у вас есть ссылка на список. Простыми словами, где вы используете ListView listView=(ListView)findviewById(R.id.tv1) - person Altaf Shaikh; 22.08.2017
comment
я отредактировал, чтобы сделать его более понятным для вас. Если вы все еще не понимаете, вам нужно опубликовать свой код активности, где вы инициализируете список, чтобы я мог сделать его более очевидным. - person Dreamers Org; 22.08.2017

Нет ничего лучше, чем опоздать на вечеринку. Мы публикуем этот ответ, потому что мы изо всех сил пытались установить OnLongClickListener в нашем RecyclerAdapter. Почему, потому что, когда вы вводите код, если значение RETURN не включено перед добавлением строк кода между оператором открытия и возвратом, компилятор жалуется, и можно подумать, что они просто неверны, вот небольшой код, надеюсь, он поможет любому новичку в OnLongClickListener

class PersonRecyclerAdapter(contactList: List<Contact>, internal var context: Context) : RecyclerView.Adapter<PersonRecyclerAdapter.ViewHolder>() {

private var contactList: List<Contact> = ArrayList()
init { this.contactList = contactList }

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(context).inflate(R.layout.new_single_card,parent,false)
    return ViewHolder(view)
}

override fun getItemCount(): Int {
    return contactList.size
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val items = contactList[position]
    holder.item.text = items.name

    holder.bindCheckBox()
    // This code calls the function below in the inner class
    // too much code manipulation

    holder.list_new_card.setOnLongClickListener { view ->
        holder.ckBox.isChecked = false
        holder.ckBox.isEnabled = true
        holder.item.text = items.name
        true

    }
    /*holder.list_new_card.setOnClickListener {

        holder.ckBox.isChecked = false
        holder.ckBox.isEnabled = true
        holder.item.text = items.name

        //val i = Intent(context, MainActivity::class.java)
        //i.putExtra("Mode", "E")
        //i.putExtra("Id", items.id)
        //i.putExtra("ET",items.name)
        //i.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        //context.startActivity(i)
        // This code attaches a listener to the tvName in the new_single_card.xml
    }*/

    holder.editCLICK.setOnClickListener {
        val i = Intent(context, MainActivity::class.java)
        i.putExtra("FROM", "U")
        i.putExtra("MainActId",items.id)
        i.putExtra("ET",items.name)
        i.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        context.startActivity(i)
    }

}

inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {

    var item: TextView = view.findViewById(R.id.tvName) as TextView
    var list_new_card: CardView = view.findViewById(R.id.list_new_card) as CardView
    var editCLICK: RelativeLayout = view.findViewById(R.id.editCLICK) as RelativeLayout
    var ckBox:CheckBox = view.findViewById(R.id.ckBox)as CheckBox
    // This is how you declare a instance of the Widiget you want to work with

    fun bindCheckBox(){// Create function and BIND it in the onBindViewHolder function

        ckBox.setOnCheckedChangeListener { view,isChecked ->
            if(ckBox.isChecked){
                item.visibility = View.VISIBLE
                item.setTextColor(Color.parseColor("#FF0000"))
                item.text = "Click & HOLD Me to View Item"
                ckBox.isEnabled = false

            }else
            item.setTextColor(Color.parseColor("#000000"))
        }
    }
}

}

Обратите внимание на различные способы включения слушателей в RecyclerAdapter.

person Vector    schedule 20.09.2018