Сортировка RecycleView - PullRequest
       4

Сортировка RecycleView

0 голосов
/ 19 января 2020

В течение некоторого времени я боролся с проблемой сортировки информации в 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 У кого-нибудь есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 19 января 2020
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

Я надеюсь, что помог кому-то столько, сколько не могу сосчитать, сколько раз я нашел здесь помощь. Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...