Как передать несколько выбранных элементов из Recyclerview в Activity? - PullRequest
0 голосов
/ 17 апреля 2020

есть два Recyclerview в одной и той же деятельности rv1 и rv2. Выбранный элемент rv1 будет отображаться в rv2 rv1: здесь мы выбираем несколько элементов

rv2: он должен отображаться следующим образом

Класс адаптера rv1:

class ServiceJobAdapter(val context: Context, var list:ArrayList<JobRespo>,var listener:OnItemClick):
RecyclerView.Adapter<ServiceJobAdapter.ItemsCarrier>(){
 var currentSelectedIndex= -1
 var selectedItem = SparseBooleanArray()
 var animationItemsIndex = SparseBooleanArray()
private val reverseAllAnimations = false
var holder:ItemsCarrier? =null
class ItemsCarrier(itemView: View) : RecyclerView.ViewHolder(itemView)
{
    var jobName = itemView.findViewById<TextView>(R.id.job_name)
    var jobPrice = itemView.findViewById<TextView>(R.id.job_price)
    var iconBack = itemView.findViewById(R.id.icon_back) as RelativeLayout
    var iconFront = itemView.findViewById(R.id.icon_front) as RelativeLayout
    var iconContainer = itemView.findViewById(R.id.icon_container) as CardView
    fun binde(jobRespo: JobRespo) {
        jobName.text = jobRespo.repDesc
        jobPrice.text="₹"+jobRespo.repRice
        if (iconFront.visibility == View.VISIBLE)
        {
            jobRespo.setChecked(false)
        }else{
            jobRespo.setChecked(true)
        }
    }
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemsCarrier {
    val view = LayoutInflater.from(context).inflate(R.layout.job_row,parent,false)
    return ItemsCarrier(view)
}
override fun getItemCount(): Int {
    return list.size
}
override fun onBindViewHolder(holder: ItemsCarrier, position: Int) {
    this.holder = holder
    holder.itemView.isActivated = selectedItem[position,false]
    holder.binde(list[position])
    applyIconAnimation(holder, position)
    // apply click events
    applyClickEvents(holder, position)
}
private fun applyClickEvents(holder: ItemsCarrier, position: Int) {
    holder.iconContainer.setOnClickListener {
        listener.onIconClicked(position)
        listener.AllItem(list[position]) }
}
private fun applyIconAnimation(holder: ItemsCarrier, position: Int)
{
    if (selectedItem.get(position, false)) {
        holder.iconFront!!.visibility = View.GONE
        resetIconYAxis(holder.iconBack)
        holder.iconBack.visibility = View.VISIBLE
        holder.iconBack.alpha = 1f
        if (currentSelectedIndex == position) {
            FlipAnimator.flipView(context, holder.iconBack, holder.iconFront, true)
            resetCurrentIndex()
        }
    } else {
        holder.iconBack.visibility = View.GONE
        resetIconYAxis(holder.iconFront)
        holder.iconFront.visibility = View.VISIBLE
        holder.iconFront.alpha = 1f

        if (reverseAllAnimations && animationItemsIndex.get(
                position,
                false
            ) || currentSelectedIndex == position
        ) {
            FlipAnimator.flipView(context, holder.iconBack, holder.iconFront, false)
            resetCurrentIndex() } } }
private fun resetIconYAxis(view: RelativeLayout?)
{
    if (view!!.rotationY != 0f) {
        view.rotationY = 0f
    }
}
private fun resetCurrentIndex() {
    currentSelectedIndex = -1
}
fun toggleSelection(pos: Int) {
    currentSelectedIndex = pos
    if (selectedItem.get(pos, false)) {
        selectedItem.delete(pos)
        animationItemsIndex.delete(pos)
    } else {
        selectedItem.put(pos, true)
        animationItemsIndex.put(pos, true)
    }
    notifyItemChanged(pos)
}
fun getSelectedItems(): ArrayList<JobRespo>
{
    val selectItems = ArrayList<JobRespo>()
    for(item in list)
    {
        if (!item.isChecked())
        {
            selectItems.add(item)
        }
    }
    return selectItems}}

Использование интерфейса

interface OnItemClick{
fun onIconClicked(position: Int)
fun AllItem(jobs:JobRespo)}

интерфейс имплимента в Activity

  override fun onIconClicked(position: Int) {
    mAdapter!!.toggleSelection(position)
}
override fun AllItem(jobs: JobRespo) {
    val selectedItems:ArrayList<JobRespo>
                 =mAdapter!!.getSelectedItems()
    selectIte.addAll(selectedItems)
}

Класс адаптера 2-го просмотра Recycler:

lass SelectItemAdapter(val context: Context, var list:List<JobRespo>): RecyclerView.Adapter<SelectItemAdapter.ItemsCarriers>(){
class ItemsCarriers(itemView: View) : RecyclerView.ViewHolder(itemView) {
    var itemName = itemView.findViewById<TextView>(R.id.item_name)
    var itemPrice= itemView.findViewById<TextView>(R.id.item_peice)
    var itmDelet =itemView.findViewById<LinearLayout>(R.id.item_delete)
    fun bind(job: JobRespo) {
      itemName.text = job.repDesc
      itemPrice.text = job.repRice }
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemsCarriers {
    val root = LayoutInflater.from(context).inflate(R.layout.select_item_row,parent,false)
    return ItemsCarriers(root)
}
override fun getItemCount(): Int {
  return list.size
}
override fun onBindViewHolder(holder: ItemsCarriers, position: Int) {
   holder.bind(list[position])}}

Теперь, как я могу передать несколько отобранных данных из одного обзора переработчика в просмотр повторного просмотра того же вида деятельности?

Спасибо за ваше внимание и направил мне :)

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

попробуйте перезагрузить упражнение

 finish();
startActivity(getIntent());
0 голосов
/ 17 апреля 2020

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

fun setSelectedData(data:ArrayList<JobRespo>){
 this.list.clear()
 this.list.addAll(data)
 notifyDataSetChanged ();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...