一段时间以来,我一直在为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
降序吗?有人知道如何解决此问题吗?
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
我希望我能帮助到我无法数数的人在这里找到了帮助。问候