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)
在片段/活动连接您的Adapter
到RecyclerView
:
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 }
就这些。 一切都应该现在工作。 希望能帮助到你。