как редактировать вид макета в родительском при использовании RecyclerView?

#android-recyclerview

Вопрос:

я использую один адаптер и один макет для 2 RecyclerView. Я хочу отредактировать представление макета в определенном окне RecyclerView, как это можно сделать?

это мой адаптер

 class PictureAdapter(private val onclickToRemove: ((Int) -> Unit?)?,  private val onclickToZoom: ((String) -> Unit?)?  , private val context: Context) : RecyclerView.Adapter<PictureAdapter.MyViewHolder>() {    inner class MyViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {  private val picture = itemView.findViewById<RoundedImageView>(R.id.itemPicture)  private val btnRemove = itemView.findViewById<RoundedImageView>(R.id.btnRemovePicture)  private val pictureName = itemView.findViewById<TextView>(R.id.itemPictureName)   fun onBind(item: PictureModel) {  Glide.with(context).load(item.urlPicture).into(picture)  pictureName.text = item.pictureName  btnRemove.setOnClickListener {  onclickToRemove?.invoke(adapterPosition)  }  itemView.setOnClickListener {  onclickToZoom?.invoke(item.urlPicture)  }  }  }  private val differCallback = object : DiffUtil.ItemCallback<PictureModel>(){  override fun areItemsTheSame(oldItem: PictureModel, newItem: PictureModel): Boolean {  return oldItem.urlPicture == newItem.urlPicture  }  override fun areContentsTheSame(oldItem: PictureModel, newItem: PictureModel): Boolean {  return oldItem == newItem  }  }  val differ = AsyncListDiffer(this,differCallback)  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {  val view = LayoutInflater.from(parent.context).inflate(R.layout.item_picture,parent,false)  return MyViewHolder(view)  }   override fun onBindViewHolder(holder: MyViewHolder, position: Int) {  val picture = differ.currentList[position]  holder.onBind(picture)  }   override fun getItemCount(): Int {  return differ.currentList.size  } }  

мой английский не очень хорош ,поэтому я надеюсь, что вы мне посочувствуете, желаю вам хорошего дня!

Ответ №1:

Вы можете скрыть или отобразить свое представление с помощью условного рендеринга. Пример:

 val tvName = findViewById<TextView>(R.id.tv_item_user); tvName.Visibility = View.VISIBLE; // View.GONE, View.INVISIBLE are available too.  

Предположим, вы вызываете свой адаптер из ActivityA, затем передаете флаг, подобный flag: 1 и когда вы вызываете свой адаптер из ActivityB, затем проходите flag: 2 . Вы получаете значение флага от адаптера и отображаете свое представление на основе флага 1 или 2.

Например, Ваш layout_item.xml файл имеет 2 текстовых представления. Один из них предназначен для nameTextView, а другой-для schoolTextView. Когда вы получаете значение флага 1, вы просто показываете nameTextView и скрываете schoolTextView. Когда вы получаете значение флага 2, вы показываете schoolTextView и скрываете nameTextView.

В вашем случае вы добавляете параметр флага с классом адаптера. Передайте флаг » нет » при вызове/инициализации вашего адаптера. Внутри onBind() функции MyViewHolder класса вы можете скрывать и показывать свое представление в соответствии с вашими собственными требованиями.