问题描述
我正在尝试将我的Activity(包含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,?)
mRecyclerView.addItemdecoration(
androidx.recyclerview.widget.DividerItemdecoration(
this,LinearLayout.VERTICAL
)
)
mRecyclerView.adapter = mAdapter
}
}
RecyclerView适配器
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
}
}
解决方法
您可以使用lamda声明您的点击侦听器:
val mListener = AdapterView.OnItemClickListener { parent,view,position,id -> }
val mAdapter = MyAdapter(this,mList,true,mListener)
或者简单地:
val mAdapter = MyAdapter(this,true) { parent,id -> }