簡體   English   中英

如何在 RecyclerView 中獲取項目的位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM