Android Kotlin Recyclerview项目单击以获取新的意图
我有个问题。我可以在点击Recyclerview中的任何项目时打印祝酒词。但我想在单击时切换到其他活动。你能具体地帮我一下吗?这对我来说是一个非常重要的项目。我编写的代码块如下所示。提前谢谢 客户适配器 类customerAdapter(private val companynameArray:ArrayList,private val companyOfArray:ArrayList,private val companyPhoneArray:ArrayList): RecyclerView.Adapter(){ 我没有指定我想参加的活动。如果您能提供帮助,我将不胜感激 如果有帮助,我在这里编写客户机类的代码 类别客户:AppCompatActivity() { val menuInflater=getMenuInflater() 菜单充气器。充气(右菜单。添加客户,菜单) 意向。额外(“信息”、“新”) 星触觉(意图)Android Kotlin Recyclerview项目单击以获取新的意图,android,kotlin,android-intent,android-recyclerview,Android,Kotlin,Android Intent,Android Recyclerview,我有个问题。我可以在点击Recyclerview中的任何项目时打印祝酒词。但我想在单击时切换到其他活动。你能具体地帮我一下吗?这对我来说是一个非常重要的项目。我编写的代码块如下所示。提前谢谢 客户适配器 类customerAdapter(private val companynameArray:ArrayList,private val companyOfArray:ArrayList,private val companyPhoneArray:ArrayList): RecyclerView.
将您的单击侦听器放入
onBindViewHolder
方法中
override fun onBindViewHolder(holder: CustomerHolder, position: Int) {
holder.recycleCompanyName?.text="Şirket Adı:"+companynameArray[position]
holder.recycleOffName?.text="Şirket Yetkilisi :"+companyoffArray[position]
holder.recycleOffPhone?.text="İrtibat No : "+companyPhoneArray[position]
holder.itemView.setOnClickListener {
// do what ever you want here
holder.itemView.context.startActivity( /*your intent here*/)
}
}
}
步骤1:在此处传递上下文
class CustomersAdapter(val context:Context,private val
companynameArray:ArrayList,private val
companyoffArray:ArrayList, private val companyPhoneArray:ArrayList):
RecyclerView.Adapter<CustomersAdapter.CustomerHolder>() {
您需要一个上下文作为意图,这样您就可以从与此适配器关联的活动或片段中获取它,并将其传递给您的意图,或者您可以像这样从膨胀布局中的任何视图中获取它
val context=holder.title.context
val intent = Intent( context, EventDetail::class.java)
context.startActivity(intent)
要启动一个新活动,您至少需要一个上下文实例。正如在这里的一些其他答案中所写的,您可以使用视图的上下文直接在
ViewHolder
中启动该活动。但为了更好地划分职责,我建议您将导航移动到片段/活动
,其中所有其他导航这样,您就可以通过查看活动/片段
,知道哪些导航可以从该屏幕上完成,并且不需要搜索发生在适配器
或视图持有者
中的一些隐藏导航。此外,如果您需要执行startActivityForResult
,则可以使用的一个实例ntext
不足以做到这一点。为此,您需要一个活动
或片段
实例,我们还有另一个理由将所有导航放在那里
所以你可以这样做:
将LAMBDA添加到适配器构造函数:
class CustomersAdapter(private val companynameArray: ArrayList,
private val companyoffArray: ArrayList,
private val companyPhoneArray: ArrayList,
private val onItemClick: () -> Unit) : RecyclerView.Adapter<CustomersAdapter.CustomerHolder>() {
class CustomerHolder(view: View,
private val onItemClick: () -> Unit) : RecyclerView.ViewHolder(view) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomerHolder {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.recycler_view_customer_row,parent,false)
return CustomersAdapter.CustomerHolder(view, onItemClick) //Add onItemClick lambda instance from adapter here
}
itemView.setOnClickListener {
onItemClick()
}
val adapter = CustomersAdapter(companynameArray, companyoffArray, companyPhoneArray) {
startActivity() // do your navigation here
}
修改VIEWHOLDER构造函数调用:
class CustomersAdapter(private val companynameArray: ArrayList,
private val companyoffArray: ArrayList,
private val companyPhoneArray: ArrayList,
private val onItemClick: () -> Unit) : RecyclerView.Adapter<CustomersAdapter.CustomerHolder>() {
class CustomerHolder(view: View,
private val onItemClick: () -> Unit) : RecyclerView.ViewHolder(view) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomerHolder {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.recycler_view_customer_row,parent,false)
return CustomersAdapter.CustomerHolder(view, onItemClick) //Add onItemClick lambda instance from adapter here
}
itemView.setOnClickListener {
onItemClick()
}
val adapter = CustomersAdapter(companynameArray, companyoffArray, companyPhoneArray) {
startActivity() // do your navigation here
}
单击调用LAMBDA:
class CustomersAdapter(private val companynameArray: ArrayList,
private val companyoffArray: ArrayList,
private val companyPhoneArray: ArrayList,
private val onItemClick: () -> Unit) : RecyclerView.Adapter<CustomersAdapter.CustomerHolder>() {
class CustomerHolder(view: View,
private val onItemClick: () -> Unit) : RecyclerView.ViewHolder(view) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomerHolder {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.recycler_view_customer_row,parent,false)
return CustomersAdapter.CustomerHolder(view, onItemClick) //Add onItemClick lambda instance from adapter here
}
itemView.setOnClickListener {
onItemClick()
}
val adapter = CustomersAdapter(companynameArray, companyoffArray, companyPhoneArray) {
startActivity() // do your navigation here
}
修复适配器构造函数调用:
class CustomersAdapter(private val companynameArray: ArrayList,
private val companyoffArray: ArrayList,
private val companyPhoneArray: ArrayList,
private val onItemClick: () -> Unit) : RecyclerView.Adapter<CustomersAdapter.CustomerHolder>() {
class CustomerHolder(view: View,
private val onItemClick: () -> Unit) : RecyclerView.ViewHolder(view) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomerHolder {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.recycler_view_customer_row,parent,false)
return CustomersAdapter.CustomerHolder(view, onItemClick) //Add onItemClick lambda instance from adapter here
}
itemView.setOnClickListener {
onItemClick()
}
val adapter = CustomersAdapter(companynameArray, companyoffArray, companyPhoneArray) {
startActivity() // do your navigation here
}
为什么要将lambda作为适配器中构造函数的最后一个参数?如果函数的最后一个参数是函数,那么作为相应参数传递的lambda表达式可以放在括号()之外。我们正是用上面处理导航的最后一段垃圾代码做到了这一点。谢谢您,先生。但是,当我按照您所说的做时,我没有得到结果。我遇到了以下许多错误。CustomersAdapter.kt:(30,61):Name expected CustomersAdapter.kt:(31,46):expected')'CustomersAdapter.kt:(12,36):未解析引用:Context CustomersAdapter.kt:(30,35):未解析引用:Context CustomersAdapter.kt:(31,39):未解决的参考:意图谢谢你,先生。我到底在哪里写这个谢谢你,先生。但是holder不在这个区域工作谢谢你,先生,除了最后一部分,我按照我说的做了。我在哪里写最后一部分的代码块?(修复适配器构造函数调用)。你能完整地写下意向部分吗?我需要更多关于这方面的信息。你想打开什么活动?你想向新活动传递任何其他数据吗?如果是,哪些数据?谢谢你,先生。我按照你说的做了,并且成功了。但是我是否有可能就不同的问题与你联系?