drakeet / MultiType

Flexible multiple types for Android RecyclerView.
Apache License 2.0
5.76k stars 751 forks source link

关于多类型item获取某一类型item的情况 #233

Closed mny459 closed 6 years ago

mny459 commented 6 years ago

请教一个问题:在多个类型item与多个ItemViewBinder的情况下,是否有一种比较简便的方式去获取某一类型的item集合。 我目前能想到的方法就是全部遍历,类似这样,但是感觉这不太优雅,也影响效率:

        for (int i = 0; i < mAdapter.getItems().size(); i++) {
            if (mAdapter.getItems().get(i) instanceof  AItem){
                //business
            }
        }
drakeet commented 6 years ago

你可以自定义一个 items 容器或载体,交予 adapter。

linzhengloser commented 6 years ago

关于这个问题,最近在项目中遇到很多次,使用的方法是

mItems.filter { it is Type }.map { is as Type }

Type 是想从 Items 中获取的类型。 可以通过 Kotlin 里面的一些特性将上面的方法进行封装

inline fun <reified T> getTypeList(item: Items) = item.filter { it is T }.map{ it as T }

前提是用的是 Kotlin。