Android kotlin回收器适配器活页夹

Android kotlin回收器适配器活页夹,android,android-recyclerview,kotlin,Android,Android Recyclerview,Kotlin,我们有一个RecyLeadapter,它有一个包含ImageView的RelativeLayout的onClickListener。单击视图时,数据将传输到另一个活动以进行编辑,这非常有用。我们遇到的问题是,在导航到新活动之前单击相应活动中的ImageView时,id将替换要编辑的文本。我们的问题是,如何在不刷新id的情况下获取id?我们的膨胀视图XML和RecyclerAdapter代码发布在下面 <?xml version="1.0" encoding="utf-8"?>

我们有一个RecyLeadapter,它有一个包含ImageView的RelativeLayout的onClickListener。单击视图时,数据将传输到另一个活动以进行编辑,这非常有用。我们遇到的问题是,在导航到新活动之前单击相应活动中的ImageView时,id将替换要编辑的文本。我们的问题是,如何在不刷新id的情况下获取id?我们的膨胀视图XML和RecyclerAdapter代码发布在下面

<?xml version="1.0" encoding="utf-8"?>


class PersonRecyclerAdapter(contactList:List,内部变量上下文:context):RecyclerView.Adapter(){
内部var contactList:List=ArrayList()
init{this.contactList=contactList}
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder{
val view=LAYOUTINGFLATER.from(上下文)。充气(R.layout.new_单卡,父卡,false)
返回视图保持器(视图)
}
重写getItemCount():Int{
返回contactList.size
}
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
val项目=联系人列表[位置]
holder.item.text=items.name
holder.click.setOnClickListener{
val i=Intent(上下文,MainActivity::class.java)
holder.item.text=items.id.toString()
i、 putExtra(“模式”、“E”)
i、 putExtra(“maintactid”,items.id)
i、 putExtra(“ET”,items.name)
i、 flags=Intent.FLAG\u活动\u新任务
背景.起始触觉(i)
}
}

也许我不明白,但让我试一试。如果我感到困惑,请发表评论

因此,您希望有一个包含项目列表的recyclerview。每个项目都有一个编辑按钮,您希望此按钮启动一个新活动,允许用户编辑该项目的名称。然后,您希望返回到以前的活动并更新列表

如果这是正确的,您将需要做一些更改。首先,在单击侦听器中,您将手动将项目的文本字段设置为项目的id

holder.item.text = items.id.toString();
似乎没有什么好的理由这样做。我建议删除它

其次,您需要启动结果的编辑活动。
当您在列表活动中获得OnActivityResult回调时,您可以从捆绑包中获取项的id和新名称。然后,您将进入列表并找到具有该id的项,将名称更改为新名称,然后调用适配器。notifyDataSetChanged();这将告诉您的适配器其数据已更改,它应该用新数据重新填充列表。

因为我在DBHelper中使用相同的按钮调用insert或update,所以我的小脑袋没有想到我们需要获取Int id。我猜该id之所以会出错,是因为它位于与数据模型。Binding和RecyclerAdapter配置似乎能够以各种方式创建,因此我们将id删除为String and life is great Thanks Yeah,arraylist中的id将保留在列表活动中(只要活动及其局部未被破坏。然后它将需要从数据模型中获取)。编辑活动从您传递给它的包中获取。很高兴它工作了!
class PersonRecyclerAdapter(contactList: List<Contact>, internal var context: Context) : RecyclerView.Adapter<PersonRecyclerAdapter.ViewHolder>() {

internal var contactList: List<Contact> = ArrayList()
init { this.contactList = contactList }

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(context).inflate(R.layout.new_single_card,parent,false)
    return ViewHolder(view)
}

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

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val items = contactList[position]
    holder.item.text = items.name

    holder.click.setOnClickListener {

        val i = Intent(context, MainActivity::class.java)
        holder.item.text = items.id.toString()
        i.putExtra("Mode", "E")
        i.putExtra("MainActId",items.id)
        i.putExtra("ET",items.name)
        i.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        context.startActivity(i)
    }
}
holder.item.text = items.id.toString();