kotlin recycleradapter bindviewholder - PullRequest
       1

kotlin recycleradapter bindviewholder

0 голосов
/ 17 сентября 2018

У нас есть RecylerAdapter, у которого есть onClickListener для RelativeLayout, который содержит ImageView.При нажатии на представление данные передаются в другое действие для редактирования, это прекрасно работает.Проблема, с которой мы сталкиваемся, заключается в том, что при нажатии ImageView в соответствующем действии непосредственно перед переходом к новому действию идентификатор заменяет текст, подлежащий редактированию.Наш вопрос, как получить идентификатор без процесса, заменяющего перепрошивку идентификатора?Наш раздутый 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 голосов
/ 17 сентября 2018

Может быть, я не понимаю вещи, но позвольте мне дать ему шанс. Прокомментируйте, если я запутался.

Итак, вы хотите, чтобы у рециркулятора был список товаров. Каждый элемент имеет кнопку редактирования, и вы хотели бы, чтобы он запускал новое действие, позволяющее пользователю редактировать имя этого элемента. Затем вы хотели бы вернуться к предыдущему занятию и обновить список.

Если это правильно, вам нужно внести пару изменений. Во-первых, в своем прослушивателе по щелчку вы вручную устанавливаете в текстовом поле элемента его идентификатор.

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

Кажется, нет веских причин для этого. Я бы порекомендовал удалить его.

Во-вторых, вы захотите начать редактирование результата. https://developer.android.com/training/basics/intents/result Когда вы получаете обратный вызов OnActivityResult в списке действий, вы можете получить идентификатор элемента и новое имя из пакета. Затем вы войдете в свой список и найдете элемент с этим идентификатором, измените имя на новое имя и вызовите adaptor.notifyDataSetChanged (); Это сообщит вашему адаптеру, что его данные изменились, и он должен заново заполнить список новыми данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...