Android 如何在活动内的RecyclerView适配器声明中声明click listener

Android 如何在活动内的RecyclerView适配器声明中声明click listener,android,kotlin,android-recyclerview,onclicklistener,android-adapter,Android,Kotlin,Android Recyclerview,Onclicklistener,Android Adapter,我正在尝试将我的活动(包含RecyclerView)与RecyclerView适配器连接,但在声明部分卡住了。我知道需要指定与适配器类中的click listener参数关联的值,但我不确定当每个RecyclerView项都有不同的值时应该是什么 mAdapter = MyAdapter(this, mList, true, ?) 你有什么想法可以用什么来代替问号吗 活动 class MainActivity : AppCompatActivity() { private latein

我正在尝试将我的活动(包含
RecyclerView
)与
RecyclerView
适配器连接,但在声明部分卡住了。我知道需要指定与适配器类中的click listener参数关联的值,但我不确定当每个RecyclerView项都有不同的值时应该是什么

mAdapter = MyAdapter(this, mList, true, ?)
你有什么想法可以用什么来代替问号吗

活动

class MainActivity : AppCompatActivity() {
    private lateinit var mAdapter: MyAdapter
    private val mList = ArrayList<MyItem>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mList.add(
                ItemCompany(
                        getString(R.string.bing)
                )
        )
        mList.add(
                ItemCompany(
                        getString(R.string.google)
                )
        )
        mList.add(
                ItemCompany(
                        getString(R.string.yahoo)
                )
        )

        val mRecyclerView = findViewById<RecyclerView>(R.id.myRecyclerView)
        mRecyclerView.layoutManager =
                        androidx.recyclerview.widget.LinearLayoutManager(this)
        mAdapter = MyAdapter(this, mList, true, ?)
        mRecyclerView.addItemDecoration(
                        androidx.recyclerview.widget.DividerItemDecoration(
                                this,
                                LinearLayout.VERTICAL
                        )
                )
        mRecyclerView.adapter = mAdapter
    }
}
class MainActivity:AppCompatActivity(){
私有lateinit var mAdapter:MyAdapter
private val mList=ArrayList()
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mList.add(
项目公司(
getString(R.string.bing)
)
)
mList.add(
项目公司(
getString(R.string.google)
)
)
mList.add(
项目公司(
getString(R.string.yahoo)
)
)
val mRecyclerView=findviewbyd(R.id.myRecyclerView)
mRecyclerView.layoutManager=
androidx.recyclerview.widget.LinearLayoutManager(此)
mAdapter=MyAdapter(this,mList,true,?)
mRecyclerView.additemedecoration(
androidx.recyclerview.widget.DividerItemDecoration(
这
直线布局
)
)
mRecyclerView.adapter=mAdapter
}
}
回收视图适配器

class MyAdapter(
        val myContext: Context,
        var listCompany: MutableList<ItemCompany>,
        private val mTwoPane: Boolean,
        private val itemClickListener: AdapterView.OnItemClickListener
) : androidx.recyclerview.widget.RecyclerView.Adapter<MyAdapter
.CompanyViewHolder>() {

    class CompanyViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView
    .ViewHolder(itemView) {
        var tvTitle: TextView = itemView.findViewById(R.id.tv_RVItem)

        fun bind(company: ItemCompany, clickListener: AdapterView.OnItemClickListener)
        {
            tvTitle.text = company.companyName

            itemView.setOnClickListener {v ->
                val intent: Intent = when (company.companyName) {
                    v.resources.getString(R.string.bing) -> {
                        Intent(Intent.ACTION_VIEW,
                                Uri.parse("https://www.bing.com/"))
                    }
                    v.resources.getString(R.string.google) -> {
                        Intent(Intent.ACTION_VIEW,
                                Uri.parse("https://www.google.com/"))
                    }
                    else -> {
                        Intent(Intent.ACTION_VIEW,
                                Uri.parse("https://www.yahoo.com/"))
                    }
                }
                itemView.getContext.startActivity(intent)
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CompanyViewHolder {
        val inflater = LayoutInflater.from(myContext)
        val v = inflater.inflate(R.layout.rv_item, parent, false)
        return CompanyViewHolder(v)
    }

    override fun onBindViewHolder(holder: CompanyViewHolder, position: Int) {
        val product = listCompany[holder.adapterPosition]

        holder.tvTitle.text = product.companyName

        holder.bind(product, itemClickListener)
    }

    override fun getItemCount(): Int {
        return listCompany.size
    }

    override fun getFilter(): Filter {
        return companyFilter
    }
}
类MyAdapter(
val myContext:Context,
var listCompany:MutableList,
private val mTwoPane:布尔值,
私有val项ClickListener:AdapterView.OnItemClickListener
):androidx.recyclerview.widget.recyclerview.Adapter(){
类CompanyViewHolder(itemView:View):androidx.recyclerview.widget.recyclerview
.ViewHolder(项目视图){
变量tvTitle:TextView=itemView.findViewById(R.id.tv\RVItem)
趣味绑定(公司:ItemCompany,clickListener:AdapterView.OnItemClickListener)
{
tvTitle.text=company.companyName
itemView.setOnClickListener{v->
val intent:intent=when(company.companyName){
v、 resources.getString(R.string.bing)->{
意图(意图、行动和视图,
解析https://www.bing.com/"))
}
v、 resources.getString(R.string.google)->{
意图(意图、行动和视图,
解析https://www.google.com/"))
}
其他->{
意图(意图、行动和视图,
解析https://www.yahoo.com/"))
}
}
itemView.getContext.startActivity(意图)
}
}
}
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):CompanyViewHolder{
val充气机=布局充气机。从(myContext)
val v=充气机充气(R.layout.rv_项目,父项,错误)
返回公司翼肩(v)
}
覆盖BindViewHolder(holder:CompanyViewHolder,position:Int){
val product=上市公司[holder.adapterPosition]
holder.tvTitle.text=product.companyName
holder.bind(产品、项目ClickListener)
}
重写getItemCount():Int{
返回列表公司大小
}
重写getFilter():筛选器{
返回公司过滤器
}
}

您可以使用lamda声明您的单击侦听器:

val mListener = AdapterView.OnItemClickListener { parent, view, position, id -> }
val mAdapter = MyAdapter(this, mList, true, mListener)
或者简单地说:

val mAdapter = MyAdapter(this, mList, true) { parent, view, position, id -> }

您可以使用lamda声明您的单击侦听器:

val mListener = AdapterView.OnItemClickListener { parent, view, position, id -> }
val mAdapter = MyAdapter(this, mList, true, mListener)
或者简单地说:

val mAdapter = MyAdapter(this, mList, true) { parent, view, position, id -> }