繁体   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