未读取 RecyclerView 单击事件中的上下文
Context in RecyclerView click event not being read
出于某种原因,在尝试将点击侦听器应用于我的 RecyclerView
项目以启动新的 activity 时,未读取我的 RecyclerView
适配器中的上下文。 myContext.startActivity(intent)
returns 一个 'unresolved reference' 错误。为了阅读上下文,应该将其更改为什么?我是否需要使用视图持有者的上下文或 TextView
或其他东西?
Unresolved reference: myContext
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/"))
}
}
myContext.startActivity(intent)
clickListener.onItemClick(company)
}
}
}
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
}
}
在Kotlin中,嵌套的class默认是静态的,所以它的数据成员和成员函数可以在不创建class的对象的情况下被访问。嵌套 class 无法访问外部 class.
的数据成员
因为“myContext”是外部 Class ~ “MyAdapter”的数据成员,这就是它在内部 Class 中未解析的原因。
出于某种原因,在尝试将点击侦听器应用于我的 RecyclerView
项目以启动新的 activity 时,未读取我的 RecyclerView
适配器中的上下文。 myContext.startActivity(intent)
returns 一个 'unresolved reference' 错误。为了阅读上下文,应该将其更改为什么?我是否需要使用视图持有者的上下文或 TextView
或其他东西?
Unresolved reference: myContext
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/"))
}
}
myContext.startActivity(intent)
clickListener.onItemClick(company)
}
}
}
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
}
}
在Kotlin中,嵌套的class默认是静态的,所以它的数据成员和成员函数可以在不创建class的对象的情况下被访问。嵌套 class 无法访问外部 class.
的数据成员因为“myContext”是外部 Class ~ “MyAdapter”的数据成员,这就是它在内部 Class 中未解析的原因。