RecycleView排序

问题描述 投票:0回答:1

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

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降序吗?有人知道如何解决此问题吗?

android firebase android-studio kotlin view
1个回答
0
投票
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)-对此数据进行排序,我们得到的结果将递增[]

1 - (1578374795583)
2 - (1579097163159)
3 - (1579152252463)

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

1 - (1578374795583) -> 0 - 1578374795583 = - 1578374795583
2 - (1579097163159) -> 0 - 1579097163159 = - 1579097163159
3 - (1579152252463) -> 0 - 1579152252463 = - 1579152252463

我们需要在Firebase中添加一个变量,这将是此操作的结果,然后我们按此操作的结果进行排序并准备就绪。

1 - 1579152252463
2 - 1579097163159
3 - 1578374795583

我希望我能帮助到我无法数数的人在这里找到了帮助。问候

© www.soinside.com 2019 - 2024. All rights reserved.