android中的setOnLongClickListener和kotlin

我怎样才能在我的ListView中的每个项目中使用setOnItemClickListner

我的xml:

   

这是我的适配器类

 inner class mo3d1Adapter : BaseAdapter { override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return listOfmo3d.size } var listOfMkabala = ArrayList() var context: Context? = null constructor(context: Context, listOfMkabaln: ArrayList) : super() { this.listOfMkabala = listOfMkabaln this.context = context } override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { val mo3d = listOfmo3d[p0] var inflatormo3d = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater var myViewmo3d = inflatormo3d.inflate(R.layout.fragment_item, null) lvMo3d.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, i, l -> Toast.makeText(context, " TEST STACK ", Toast.LENGTH_LONG).show() } myViewmo3d.meeting_name.text = mo3d.name1!! myViewmo3d.meeting_date.text = mo3d.date.toString()!! myViewmo3d.attendance_number.text = mo3d.n2.toString()!! return myViewmo3d } override fun getItem(p0: Int): Any { return listOfmo3d[p0] } } 
  • 我希望我的ListView每个项目的监听器

当我在适配器中使用setOnClickListener这个方法setOnClickListener ,它不起作用,我可以在哪里使用?

在你的活动课上试试这个

 lv.setOnItemClickListener { parent, view, position, id -> Toast.makeText(this, "Position Clicked:"+" "+position,Toast.LENGTH_SHORT).show() } 

首先我想说的是它是RecyclerView而不是ListView 。 你可以find很多信息为什么要这样做。 例如,你可以读它听到:

RecyclerView与ListView

关于你的问题如何用RecyclerView正确的方式做到这一点。

插入依赖与RecyclerView,他们现在在Kotlin支持库。

实现“com.android.support:appcompat-v7:25.4.0”

首先用xml布局中的RecyclerView更改您的ListView,如下所示:

  

RecyclerView创建Adapter

 class AccountListAdapter(val accountList: AccountList, val itemListener: (Account) -> Unit) : RecyclerView.Adapter(){ override fun getItemCount(): Int = accountList.size override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(accountList[position]) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder{ val view = LayoutInflater.from(parent.context).inflate(R.layout.item_account, parent, false) return ViewHolder(view, itemListener) } class ViewHolder(itemView: View, val itemClick: (Account) -> Unit): RecyclerView.ViewHolder(itemView){ fun bind(account : Account){ with(account){ itemView.accountName.text = title itemView.setOnClickListener{ itemClick(this)} } } } } 

item_account.xml

     

模型(在Kotlin中,您可以将它们放在一个文件中,例如AccountModels.kt ):

 data class AccountList(val accounts: List){ val size : Int get() = accounts.size operator fun get(position: Int) = accounts[position] } data class Account(val id : Long, val title : String, val balance : Int, val defCurrency: Int) 

片段/活动连接您的AdapterRecyclerView

 override fun onStart() { super.onStart() setupAdapter() } fun setupAdapter(){ Log.d(TAG, "updating ui..") val account1 = Account(1,"Credit", 1000, 2) val account2 = Account(2, "Debit", 500, 2) val account3 = Account(3, "Cash", 7000, 2) val accounts : List = listOf(account1, account2, account3) val adapter = AccountListAdapter(AccountList(accounts)){ val title = it.title Log.d(TAG, "$title clicked") } accountList.layoutManager = LinearLayoutManager(activity) accountList.adapter = adapter } 

就这些。 一切都应该现在工作。 希望能帮助到你。