Android-使用SelectionTracker选择所有项目

时间:2019-03-24 13:00:48

标签: android android-recyclerview android-support-library

我使用support-library-v28的{​​{3}}格式 正如预期的那样,效果很好。

我唯一需要做的就是启用Select All功能(使用ToolBar

看一下API,我发现有一种选择全部的方法,但是这需要使用所有值创建Iterable<Long>,这意味着创建一个数组,该数组保存从1到1的Long值。 datasource.size()

有没有更简单的方法来选择数据源中的所有项目?

1 个答案:

答案 0 :(得分:0)

由于我最近必须设置相同的功能,所以我认为我会分享自己的方法。实际上,使用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'参数,它将从本质上确定我们是否要选择全部或取消全部选择。

请注意,我只是使用我的'keys'的arrayList(对我来说,这只是项目的索引。但是,这可能会有所不同,具体取决于您如何设置ItemDetails Builder)并调用Kotlin .asIterable( )函数将其变为可迭代的。

我也将对setItemsSelected()的调用放置在处理程序中,以强制选择在UI线程上进行。

现在,每当要选择全部/取消选择所有位置时,都可以调用startHandler(true)!