Android Kotlin Recyclerview项目单击以获取新的意图

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.

我有个问题。我可以在点击Recyclerview中的任何项目时打印祝酒词。但我想在单击时切换到其他活动。你能具体地帮我一下吗?这对我来说是一个非常重要的项目。我编写的代码块如下所示。提前谢谢

客户适配器

类customerAdapter(private val companynameArray:ArrayList,private val companyOfArray:ArrayList,private val companyPhoneArray:ArrayList): RecyclerView.Adapter(){

我没有指定我想参加的活动。如果您能提供帮助,我将不胜感激

如果有帮助,我在这里编写客户机类的代码

类别客户:AppCompatActivity()

{

val menuInflater=getMenuInflater() 菜单充气器。充气(右菜单。添加客户,菜单)

意向。额外(“信息”、“新”) 星触觉(意图)


将您的单击侦听器放入
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不在这个区域工作谢谢你,先生,除了最后一部分,我按照我说的做了。我在哪里写最后一部分的代码块?(修复适配器构造函数调用)。你能完整地写下意向部分吗?我需要更多关于这方面的信息。你想打开什么活动?你想向新活动传递任何其他数据吗?如果是,哪些数据?谢谢你,先生。我按照你说的做了,并且成功了。但是我是否有可能就不同的问题与你联系?