#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
класса вы можете скрывать и показывать свое представление в соответствии с вашими собственными требованиями.