[英]How to get position of the item in RecyclerView
我是 Android 開發新手。 在我的代碼中,我不使用 onClick 方法,但我使用 setOnClickListener 和回調。 這種方式的主要問題是我不知道如何在 RecyclerView 中獲取項目的位置。
這是我的適配器:
class TestAdapter(val test : ArrayList<Test>, private val testAdapterCallback: (Test, Int)->Unit) : RecyclerView.Adapter<TestAdapter.ViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.test_view_item, parent, false)
return ViewHolder(v)
}
override fun getItemCount(): Int {
return test.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val num : Test = test[position]
holder.textView.text = num.id.toString()
holder.cardView.setTag(position)
holder.cardView.setOnClickListener(){
testAdapterCallback(num)
}
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val cardView = itemView.findViewById<CardView>(R.id.testCardView)
val textView = itemView.findViewById<TextView>(R.id.testTextView)
}
}
我已將第二個參數添加到回調中,但我不知道如何在此代碼和平中更改適配器的初始化:
val adapter = TestAdapter(list) { item ->
testAdapterItemClick(item)
}
在活動中,我正在使用這種方法:
private fun testAdapterItemClick(item: Test) {}
請幫我檢查所選元素的位置。 我以后需要它。 提前致謝)
PS對不起我的英語
在回調中添加位置作為參數。
所以,而不是: private val testAdapterCallback: (Test)->Unit
使用: private val testAdapterCallback: (Test, Int)->Unit
。
這樣你就可以在回調中傳遞位置。
holder.cardView.setOnClickListener(){
testAdapterCallback(num, position)
}
在您的活動中:
val adapter = TestAdapter(list) { item, position ->
testAdapterItemClick(item)
}
為您的OnClickListener
創建接口
interface OnClickListener{
fun clickItem(test: Test, index: Int)
}
將偵聽器傳遞給您的適配器,如下所示。
class TestAdapter(
var test : ArrayList<Test>?,
val clickListener: OnClickListener,
var mActivity: Activity
) :
RecyclerView.Adapter<TestAdapter.MyViewHolder>() {
}
現在在你的onBindViewHolder
添加點擊監聽器。
var mtest= test !!.get(i)
holder.cardView.setOnClickListener {
clickListener.clickItem(mtest, i)
}
為您的活動實施偵聽器並對其進行初始化。
this.mOnClickListener = this
將偵聽器傳遞給您傳遞數組列表的適配器。
mTestAdapter = TestAdapter(arrayList, mOnClickListener ,mActivity)
您將在您的活動覆蓋方法中獲得位置。
override fun editItem(mTest: Test, index: Int) {
if (mTest!= null) {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.