繁体   English   中英

Kotlin 被动 - 回收视图中的主动项目行

[英]Kotlin passive - active item rows in recycleview

我想创建一个包含主动行和被动行的 recyclerview 列表,如何在 Kotlin 中执行此操作? 如果 Room Database 中表中的数据与 itemtext 不同,它将处于非活动状态,无法单击。 例如,当一个项目可以单击时,另一个项目不能单击,因为该行将处于非活动状态。 来自其他活动的数据将与保存在数据库中的数据不匹配。 Kotlin 是否可能出现这种情况? 我用适配器编写了 Recycleview 列表。 我还没有创建 dao 部分。

这是我的活动绑定和 recyclerview 代码

val recyclerView : RecyclerView = binding.RecyclerView
                recyclerView.layoutManager = GridLayoutManager(this,2)
                val screenSize = resources.configuration.screenLayout and
                        Configuration.SCREENLAYOUT_SIZE_MASK
                if(screenSize == Configuration.SCREENLAYOUT_SIZE_LARGE
                    || screenSize == Configuration.SCREENLAYOUT_SIZE_XLARGE){
                    recyclerView.layoutManager = GridLayoutManager(this,3)
                }
                recyclerView.adapter = ListAdapter(mutableList1)

这是我的 ListAdapter

override fun onBindViewHolder(holder: ListViewHolder, position: Int) {
        holder.bind(mutableList1[position])
        val Name: String = mutableList1[position]

        holder.itemView.setOnClickListener { v ->
            val intent = Intent(v.context, ControlActivity::class.java)
            ListActivity.mAddress = intent.getStringExtra(BListAdapter.EXTRA_ADDRESS).toString()
            intent.putExtra(Name, Name)
            intent.putExtra(type1, type)
            val string: String = Name
           
            val zerocontrol = string.substring(5,6)
            Log.e ("zerocontrol", zerocontrol)
            val curtainCode: String = if (zerocontrol.toInt() == 0){
                string.substring(6,string.length)
            }else{
                string.substring(5,string.length)
            }
            Log.e("deneme", Code)
            val code = "PR$Code"
            intent.putExtra(Code, code)
            v.context.startActivity(intent)
        }
    }
    override fun getItemCount()= mutableList1.size
    inner class ListViewHolder (private val binding:ListItemBinding):RecyclerView.ViewHolder(binding.root){
        fun bind(item : String){
            binding.apply {
                Name.text = item
               // Log.e("PerdeAdi",item)
            }
        }
    }

取决于您使用的架构以及查询数据的方式,您能否详细说明一下。

我只有一个问题,为什么需要在回收站视图中捕获无效数据? 我们能做的只是更新我们的数据并删除其他数据。 但即使你想这样做,这里也是一个技巧。

  1. 将时间字段添加到 model。
data class Student(
    val id :Int,
    val name :String,
    val lastUpdateTime:Long= System.currentTimeInMillies()
){
    fun isOutdated():Boolean{
        return THREE_MINUTES_IN_MILLIES<(System.currentTimeInMillies()-this.lastUpdateTime);
    }
    companion object{
        private const val THREE_MINUTES_IN_MILLIES=3*60*1000;
    }
}
  1. 现在不要更改您的 http 缓存的业务逻辑。
  2. 现在在适配器的 viewHolder class 中,添加以下逻辑。
inner class ViewHolder2(val binding: NoticeViewBinding) :
    RecyclerView.ViewHolder(binding.root) {
    fun bind(student: Student) {
        if(student.isOutdated()){
            //outdated list element
        }else{
           //fresh list element
        }
    }
}

希望你没有那么快地更新你的用户界面。 这应该有效。 如果它确实有效,那么请接受我的回答,我是回答 SO 问题的新手。 来自印度的爱。 ❤️

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM