![](/img/trans.png)
[英]Dynamically Changing Toolbar Item Visibility in on RecyclerView Click (Without the LongClick)
[英]changing visibility of a recyclerview item changes other item's visibility
我有一個帶適配器的recyclerView ... recyclerview的項目帶有相似的按鈕。 當我單擊(喜歡)按鈕時,(不喜歡)應該變得不可見,反之亦然。.一切正常,但是當我單擊(喜歡)某項時,其他項目中的(不喜歡)也變得不可見,就像我在點擊一樣在其他視圖中使用相同的按鈕,我已經嘗試過此答案,但在Android上卻不起作用:在recyclerView中更改視圖的可見性,這里是適配器代碼:
package com.example.user.myapplication;
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.opengl.Visibility
import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.*
import android.widget.*
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main.view.*
import kotlinx.android.synthetic.main.item.view.*
import kotlinx.android.synthetic.main.itemm.view.*
import java.io.BufferedReader
import java.io.File
import java.io.FileReader
/**
* Created by Ahmed on 10/14/2018.
*/
class ItemmAdapter(private val mItems: Array<File>,private val activity:Activity) : RecyclerView.Adapter<ItemmAdapter.ItemViewHolder>() {
lateinit var parent:ViewGroup
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.itemm, parent, false)
this.parent=parent
return ItemViewHolder(view)
}
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
val item = mItems[position]
holder.itemView.layoutParams=RecyclerView.LayoutParams(parent.context.resources.displayMetrics.widthPixels/2,RecyclerView.LayoutParams.MATCH_PARENT)
//holder.itemView.findViewById<ImageView>(R.id.image).setImageResource(R.drawable.icons8_cycling_104)
//holder.itemView.findViewById<TextView>(R.id.description).text="abcdefghijklmnopqrstuvwxyzضصثقفغعهخحجدطكمنتالبيسشذئءؤرلاىة"
//holder.itemView.findViewById<TextView>(R.id.price).text="10000$"
holder.like.setOnClickListener{
holder.like.visibility=View.GONE
holder.unlike.visibility=View.VISIBLE
}
holder.unlike.setOnClickListener{
holder.unlike.visibility=View.GONE
holder.like.visibility=View.VISIBLE
}
holder.shopping.setOnClickListener{
holder.shopping.visibility=View.GONE
holder.notshopping.visibility=View.VISIBLE
}
holder.notshopping.setOnClickListener{
holder.notshopping.visibility=View.GONE
holder.shopping.visibility=View.VISIBLE
}
}
override fun getItemCount(): Int {
return mItems.size
}
inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val like=itemView.findViewById<ImageView>(R.id.like)
val unlike=itemView.findViewById<ImageView>(R.id.unlike)
val shopping=itemView.findViewById<ImageView>(R.id.shopping)
val notshopping=itemView.findViewById<ImageView>(R.id.notShopping)
}
}
請幫幫我
僅將bind用於設置每個項目中的項目內容 ,並將偵聽器從bind方法移動到holder類 :
inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var liked = false
var shopped = false
val like=itemView.findViewById<ImageView>(R.id.like)
val unlike=itemView.findViewById<ImageView>(R.id.unlike)
val shopping=itemView.findViewById<ImageView>(R.id.shopping)
val notshopping=itemView.findViewById<ImageView>(R.id.notShopping)
init{
like?.setOnClickListener{
liked = true
like.visibility=View.GONE
unlike.visibility=View.VISIBLE
}
unlike?.setOnClickListener{
liked = false
unlike.visibility=View.GONE
like.visibility=View.VISIBLE
}
shopping?.setOnClickListener{
shopped = true
shopping.visibility=View.GONE
notshopping.visibility=View.VISIBLE
}
notshopping?.setOnClickListener{
shopped = false
notshopping.visibility=View.GONE
shopping.visibility=View.VISIBLE
}
}
fun bind(){// call this from onBind method of adapter
if(liked) like?.performClick() else unlike?.performClick()
if(shopped) shopping?.performClick() else notshopping?.performClick()
}
}
發生這種情況是因為其具有回收站視圖(因此,當您滾動視圖時,該視圖將被回收,並且類似或不同的木棒在那里可見。
修改您的項目對象,使其包含一個布爾isLiked
並將其在onClick上設置為true或false:
holder.like.setOnClickListener{
item.setIsLiked(true);
}
holder.unlike.setOnClickListener{
item.setIsLiked(false);
}
並基於此設置視圖可見性:
holder.like.visibility=item.getIsLiked() ? View.VISIBLE : View.GONE;
holder.unlike.visibility=item.getIsLiked() ? View.GONE : View.VISIBLE;
注意 :如果使用自動生成的getter和setter,則setIsLiked(boolean like)和getIsLiked()的名稱可以不同。
購物不購物也一樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.