Android - выберите все элементы, используя SelectionTracker - PullRequest
0 голосов
/ 24 марта 2019

Я использую SelectionTracker из support-library-v28 Он отлично работает, как и ожидалось.

Единственное, что мне нужно, это включить функцию Select All (используя ToolBar)

Глядя на API, я вижу, что есть один способ выбрать все, но для этого требуется создать Iterable<Long> со всеми значениями, то есть создать массив, содержащий Long значения из 1на datasource.size()

Есть ли более простой способ выбрать все элементы в моем источнике данных?

1 Ответ

0 голосов
/ 12 апреля 2019

Поскольку мне недавно пришлось настроить такую ​​же функциональность, я решил поделиться своим подходом.Использование метода setItemsSelected(Iterable<K> keys, boolean selected) на самом деле не так сложно, как кажется.

Да, вам нужно будет пройти итерацию.Я перебрал свои данные и сохранил индекс каждого элемента как «длинный» внутри arrayList ().

EX:

yourData.forEachWithIndex { i, item ->
            //Be sure to start at one, just plus one 
            someOtherTempArray.add(i.toLong() + 1)
        }

Затем я создал метод, который облегчает «запуск» выбора всех функций:

EX:

private fun startHandler(isChecked: Boolean){
      val handler = android.os.Handler(Looper.getMainLooper())
      val runnable = Runnable {
        kotlin.run {
          mTracker!!.setItemsSelected(someOtherTempArray.asIterable(), 
                isChecked)
        }
      }
     handler.post(runnable)
  }

Параметр isChecked, который по существу определит, хотим ли мы выбрать все или отменить выбор всех.

Обратите внимание, что я просто использую свой arrayList из 'keys' (для меня это всего лишь индекс элемента. Однако, это может отличаться в зависимости от того, как настроен ваш ItemDetails Builder) и вызываю KotlinФункция .asIterable (), чтобы превратить его в итеративный.

Я также поместил вызов setItemsSelected () внутри обработчика, чтобы заставить выбор происходить в потоке пользовательского интерфейса.

Теперь, когда вы хотите выбрать / отменить выбор всего, вы можете вызвать startHandler (true)!

...