我正在尝试使用单个RecyclerView.Adapter
来查看多个片段中不同对象模型的多个Arraylist。
但是我不知道该怎么办,有没有办法做,如果可能的话我该怎么办?
我尝试使用List对象并将其强制转换为所需的对象模型。但是我不知道如何在onBindViewHolder中使用它们,我也不知道这是否是正确的方法。
public RItemAdapter(List<?> item,String tag) {
if(tag.equals("battery"))
{
bList = (List<BatteryModel>) item;
}
else if(tag.equals("device"))
{
dList = (List<DeviceModel>) item;
}
else if(tag.equals("network"))
{
nList = (List<NetworkModel>) item;
}
else if(tag.equals("storage"))
{
sList = (List<StorageModel>) item;
}
else if(tag.equals("weather"))
{
wList = (List<WeatherModel>) item;
}
}
我想用一个适配器填充多个RecyclerViews
中的多个Fragments
。
答案 0 :(得分:0)
您可以创建一个基类,其他类将从其继承。您可以在继承的类中具有所需对象的列表:每个单元格将包含一个数据对象,该数据对象包含要显示的其他内容的列表。 然后,在适配器中,只有一个基类列表,并且将在适配器的getItemViewType方法中的某个位置设置对象的视图类型。 在onBindViewHolder中,只需在视图类型上切换大小写并将右ViewHolder绑定到大小写。
这是Kotlin中的示例代码:
class TestAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
private const val VIEW_TYPE_ONE = 0
private const val VIEW_TYPE_TWO = 1
}
private val data = mutableListOf<Data>()
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): RecyclerView.ViewHolder = when (viewType) {
VIEW_TYPE_ONE -> ViewHolderOne.create(parent)
VIEW_TYPE_TWO -> ViewHolderTwo.create(parent)
else -> throw IllegalStateException("Viewtype $viewType unhandled")
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ViewHolderOne -> {
holder.bind(data[position] as DataOne)
}
is ViewHolderTwo -> {
holder.bind(data[position] as DataTwo)
}
}
}
override fun getItemViewType(position: Int): Int = when (data[position]) {
is DataOne -> VIEW_TYPE_ONE
is DataTwo -> VIEW_TYPE_TWO
}
override fun getItemCount(): Int = data.count()
override fun getItemId(position: Int): Long = data[position].id
fun setData(newData: List<MessageUiModel>) {
data.clear()
data.addAll(newData)
notifyDataSetChanged()
}
}
sealed class Data
data class DataOne(val list: List<Any>): Data()
data class DataTwo(val list: List<Any>): Data()
答案 1 :(得分:0)
我找到了best个答案。可能会帮助别人。
private static void doProspecListCompareCheck(List rhsList)
{
if(rhsList != null && !rhsList.isEmpty())
{
if (rhsList.get(0) instanceof SegReqInfoBean)
{
}
else if(rhsList.get(0) instanceof SegmentDetailInfo)
{
}
}
}