Kotlin回收站适配器

时间:2018-09-17 18:44:21

标签: android android-recyclerview kotlin

我们有一个RecylerAdapter,该适配器具有一个ReelativeLayout的onClickListener,该RelativeLayout包含一个ImageView。单击视图后,数据将传输到另一个活动进行编辑,效果很好。我们遇到的问题是,在导航到新的Activity之前,在相应的Activity中单击ImageView时,id替换了要编辑的文本。我们的问题是如何在不替换闪烁ID的情况下获取ID?我们的Inflated视图XML和RecyclerAdapter代码在下面发布

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

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp">

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:textColor="@color/color_Black"
        android:textSize="18sp"
        android:textStyle="bold" />
</RelativeLayout>

<RelativeLayout
    android:id="@+id/click"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_marginLeft="370dp"
    android:paddingLeft="6dp"
    android:paddingRight="6dp"
    android:paddingTop="12dp">

    <ImageView
        android:id="@+id/ivEdit"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/ic_edit" />

</RelativeLayout>

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)
    }
}

1 个答案:

答案 0 :(得分:1)

也许我对事情不了解,但让我试一下。如果我感到困惑,请发表评论。

因此,您想拥有一个带有物品清单的回收站视图。每个项目都有一个编辑按钮,您希望它启动一个新活动,允许用户编辑该项目的名称。然后,您想返回上一个活动并更新列表。

如果正确,则需要进行一些更改。首先,在点击监听器中,您将项目的文本字段手动设置为项目的ID。

holder.item.text = items.id.toString();

似乎没有充分的理由这样做。我建议将其删除。

第二,您将要为结果启动编辑活动。 https://developer.android.com/training/basics/intents/result 当您在列表活动中获得OnActivityResult回调时,您可以从捆绑包中获得商品的ID和新名称。然后,您将进入列表,找到具有该ID的项目,将名称更改为新名称,然后调用adapter.notifyDataSetChanged();。这将告诉您的适配器其数据已更改,并且应使用新数据重新填充列表。