我们有一个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)
}
}
答案 0 :(得分:1)
也许我对事情不了解,但让我试一下。如果我感到困惑,请发表评论。
因此,您想拥有一个带有物品清单的回收站视图。每个项目都有一个编辑按钮,您希望它启动一个新活动,允许用户编辑该项目的名称。然后,您想返回上一个活动并更新列表。
如果正确,则需要进行一些更改。首先,在点击监听器中,您将项目的文本字段手动设置为项目的ID。
holder.item.text = items.id.toString();
似乎没有充分的理由这样做。我建议将其删除。
第二,您将要为结果启动编辑活动。 https://developer.android.com/training/basics/intents/result 当您在列表活动中获得OnActivityResult回调时,您可以从捆绑包中获得商品的ID和新名称。然后,您将进入列表,找到具有该ID的项目,将名称更改为新名称,然后调用adapter.notifyDataSetChanged();。这将告诉您的适配器其数据已更改,并且应使用新数据重新填充列表。