首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecycleView排序

RecycleView排序
EN

Stack Overflow用户
提问于 2020-01-19 23:42:57
回答 1查看 52关注 0票数 0

一段时间以来,我一直在为RecycleView中的信息排序问题而苦苦挣扎,数据来自Firebase,我想根据类中的一个对象对单行进行排序。也许代码能更好地解释这一点。

代码语言:javascript
复制
private fun fetchHours(){
        var link = FirebaseAuth.getInstance().uid
        val ref = FirebaseDatabase.getInstance().getReference("/WorkTime/$link")
        ref.addListenerForSingleValueEvent(object: ValueEventListener{
            override fun onDataChange(p0: DataSnapshot) {
                val adapter = GroupAdapter<GroupieViewHolder>()

                p0.children.forEach {
                    Log.d("Vievactivity", it.toString())
                    var singlerow = it.getValue(CounterActivity.WorkTimeCountedClass::class.java)
                    if (singlerow != null ){
                        adapter.add(WorkTimeList(singlerow))
                    }
                }
                recycleViev_list.adapter = adapter

                adapter.setOnItemClickListener{ item, view ->

                    val useruuid = item as WorkTimeList
                    val intent = Intent(view.context, EditDataActivity::class.java)
                    intent.putExtra(CLICKED_ITEM_KEY, useruuid.naz.uuid)
                    startActivity(intent)

                }
            }

            override fun onCancelled(p0: DatabaseError) {

            }
        })
    }
}
class WorkTimeList(var naz: CounterActivity.WorkTimeCountedClass): Item<GroupieViewHolder>(){
    override fun bind(viewHolder: GroupieViewHolder, position: Int) {
        viewHolder.itemView.row_viewactivity_invisible_uuid.text = naz.uuid
        viewHolder.itemView.Row_viewactivity_employer.text = naz.employer
        viewHolder.itemView.Row_viewactivity_StartWork.text = naz.startTimeString
        viewHolder.itemView.Row_viewactivity_StopWork.text = naz.stopTimeString
        viewHolder.itemView.imageView_planTime.text = naz.planedTimeToSpendAtWorkString
        viewHolder.itemView.imageView_complitedTime.text = naz.totalTimeSpendAtworkString
        viewHolder.itemView.imageView_overHours.text = naz.overHoursString
    }

    override fun getLayout(): Int {
        return R.layout.row_viewactivity
    }
}

结果,他得到了类似于该screen的东西

我希望根据用户偏好对单独的行进行排序,例如从变量viewHolder.itemView.Row_viewactivity_StartPracy.text = naz.startTimeString升序或从viewHolder.itemView.imageView_complitedTime.text = name. TotalTime降序有人知道如何解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-20 00:57:11

代码语言:javascript
复制
val ref = FirebaseDatabase.getInstance().getReference("/WorkTime/$link")
    ref.orderByChild("order").addListenerForSingleValueEvent(object: ValueEventListener{
        override fun onDataChange(p0: DataSnapshot) {
            val adapter = GroupAdapter<GroupieViewHolder>()

            p0.children.forEach {
                Log.d("Vievactivity", it.toString())
                var singlerow = it.getValue(CounterActivity.WorkTimeCountedClass::class.java)
                if (singlerow != null ){
                    adapter.add(WorkTimeList(singlerow))
                }
            }
            recycleViev_lista.adapter = adapter

我找到了一个解决方案,也许只是写下这里的第一个问题就启发了我:)

所以我使用"orderByChild“添加了排序,不幸的是,只增加了排序工作。为了改变这一点,我想出了一个想法,我想要从0中减去排序后的值-它将颠倒排序方法:)

我不擅长解释,例如:写入Firebase开始时间(以毫秒为单位)例如(1579097163159),(1578374795583),(1579152252463) -对这些数据进行排序我们得到的结果是递增的

代码语言:javascript
复制
1 - (1578374795583)
2 - (1579097163159)
3 - (1579152252463)

不幸的是,我没有找到如何更改orderByChaild选项卡,使它们按降序排序.我们可以从这些值中减去​​,得到预期的效果:

代码语言:javascript
复制
1 - (1578374795583) -> 0 - 1578374795583 = - 1578374795583
2 - (1579097163159) -> 0 - 1579097163159 = - 1579097163159
3 - (1579152252463) -> 0 - 1579152252463 = - 1579152252463

我们需要向Firebase添加一个变量,它将是此操作的结果,然后按此操作的结果进行排序,它就准备好了。

代码语言:javascript
复制
1 - 1579152252463
2 - 1579097163159
3 - 1578374795583

我希望我帮助了别人,因为我已经数不清有多少次我在这里找到了帮助。问候

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59811640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档