【发布时间】:2019-11-26 18:27:39
【问题描述】:
我试图在给定位置显示图像,单击该项目后该位置不可见。这就是我保留 int 数组的原因。我给点击位置 1 和其他 0。检查后我使第一个可见而另一个不可见并调用 notifyDataSetChangesethod。 recyclerviews 滚动到 0 位置。我希望它保持在相同的位置而不改变。
类 HitParadeAdapter(私有 val 模型:MutableList,私有 val 上下文:上下文,私有 val callBack:HitParadListener): RecyclerView.Adapter() {
private var isPlay = false
private var listName = mutableListOf<String>()
private var listSort = mutableListOf<Voting_tracks>()
private val selectedItems = IntArray(models.size)
private fun setSelectedItem(position: Int) {
for (i in selectedItems.indices) {
if (i == position)
selectedItems[i] = 1
else
selectedItems[i] = 0
}
}
interface HitParadListener{
fun itemClick(position: Int)
}
init {
Log.d("Testing", "${models.size}")
for (i in models.indices){
listName.add(models[i].name)
}
sort(listName)
for (i in listName.indices){
Log.d("Sort", listName[i])
}
for (i in models.indices){
for (j in models.indices){
if (listName[i] == models[j].name){
listSort.add(models[j])
break
}
}
}
models.clear()
models.addAll(listSort)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ParadeViewHolder {
return ParadeViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_parade,
parent,
false
)
)
}
override fun getItemCount(): Int {
return models.size
}
override fun onBindViewHolder(holder: ParadeViewHolder, position: Int) {
if(selectedItems[position] == 1) holder.play.visibility = View.VISIBLE
else holder.play.visibility = View.INVISIBLE
holder.track.text = models[position].name
holder.artist.text = models[position].artists[0].name
if (models[position].picture_path != "") {
Picasso.get().load("http://rusradio.test-rmg.ru${models[position].picture_path}")
.into(holder.image)
}
holder.like.setOnClickListener {
holder.sendVariants(1)
}
holder.disLike.setOnClickListener {
holder.sendVariants(1)
}
holder.itemView.setOnClickListener {
val positions = holder.adapterPosition
if (positions != RecyclerView.NO_POSITION) {
setSelectedItem(positions)
notifyDataSetChanged()
callBack.itemClick(position)
}
}
}
inner class ParadeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val getUsers: GetList = createService()
val image: AppCompatImageView = itemView.Image
val artist: AppCompatTextView = itemView.Artist
val track: AppCompatTextView = itemView.track
val play: AppCompatImageView = itemView.image_play
val like: AppCompatImageView = itemView.imageLike
val disLike: AppCompatImageView = itemView.imageDisLike
【问题讨论】:
标签: android android-recyclerview