一段时间以来,我一直在为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降序有人知道如何解决这个问题吗?
发布于 2020-01-20 00:57:11
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我希望我帮助了别人,因为我已经数不清有多少次我在这里找到了帮助。问候
https://stackoverflow.com/questions/59811640
复制相似问题