Android getItemViewType()-如何返回int值
我想实现具有多种视图类型的RecyclerView。因此,我在适配器类中使用Android getItemViewType()-如何返回int值,android,types,android-recyclerview,Android,Types,Android Recyclerview,我想实现具有多种视图类型的RecyclerView。因此,我在适配器类中使用getItemViewType()方法: @Override public int getItemViewType(int position) { return mItems.get(position).getType(); } 现在,我得到以下错误: 不兼容的类型。必需的整数。已找到字符串 我知道:这是因为getType()方法返回的是字符串而不是int 问题:如何返回int?
getItemViewType()
方法:
@Override
public int getItemViewType(int position) {
return mItems.get(position).getType();
}
现在,我得到以下错误:
不兼容的类型。必需的整数。已找到字符串
我知道:这是因为getType()
方法返回的是字符串而不是int
问题:如何返回int?您只需为您的类型或局部变量创建一个枚举,然后返回如下内容:
companion object {
private const val MY_MESSAGE = 0
private const val OTHER_MESSAGE = 1
}
override fun getItemViewType(position: Int): Int {
val item = mMessages[position]
return if (item.isMine)
MY_MESSAGE
else
OTHER_MESSAGE
}
您必须将字符串
转换为整数
值
public class CustomAdapter {
private static final int VIEW_TYPE_DEFAULT = 0;
private static final int VIEW_TYPE_1 = 1;
private static final int VIEW_TYPE_2 = 2;
private static final int VIEW_TYPE_3 = 3;
private static final int VIEW_TYPE_4 = 4;
@Override
public int getItemViewType(int position) {
String typeString = mItems.get(position).getType();
switch (typeString) {
case "STRING1":
return VIEW_TYPE_1;
case "STRING2":
return VIEW_TYPE_2;
case "STRING3":
return VIEW_TYPE_3;
....
default:
return VIEW_TYPE_DEFAULT;
}
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
switch (getItemViewType(position)) {
case VIEW_TYPE_1;
//bind viewtype 1
break;
case VIEW_TYPE_2;
//bind viewtype 2
break;
case VIEW_TYPE_3;
//bind viewtype 3
break;
....
default:
// Bind default view
}
}
}
//使用枚举分隔视图中的项目类型。
枚举类RecycleWebDataType(val类型:Int,val描述:String){
类型_标题(1,“标题”),
类型_数据(2,“数据”),
键入页脚(3,“页脚”)
}
//模型来定义数据
数据类DataWithHeader(
val viewType:RecycleServiceWdata类型,
val headerLayoutResId:Int=R.layout.header,
val数据:数据=数据()
)
变量项:列表
//viewType.type将所需的整数a/c返回给项目。
覆盖getItemViewType(位置:Int):Int{
返回项目[位置].viewType.type
}
要处理recyclerview中的视图类型,您的ArrayList应该具有一些唯一的类型,或者必须具有getType()函数
因此,当调用getItemViewType时,它将根据对象类型返回您想要的类型。getType()返回哪些信息。。请给出该方法返回的字符串的一些示例,您实际上是在给出字符串。而该方法需要一个int。使用枚举并对视图进行分类,然后使用它们。
//Use Enums to separate the items type in the view.
enum class RecyclerViewDataType(val type: Int, val desc: String) {
TYPE_HEADER(1, "Header"),
TYPE_DATA(2, "Data"),
TYPE_FOOTER(3, "Footer")
}
// Model to Define the Data
data class DataWithHeader(
val viewType: RecyclerViewDataType,
val headerLayoutResId: Int = R.layout.header,
val data: Data = Data()
)
var items: List<DataWithHeader>
//viewType.type returns the required integer a/c to the item.
override fun getItemViewType(position: Int): Int {
return items[position].viewType.type
}
public abstract class Vehicle {
protected int mType;
protected String mName;
abstract int getType();
abstract int getName();
public static class Types{
int MotorCar = 1;
int Bike = 2;
int Truck = 3;
}
}
public class Ferrari extends Vehicle {
public Ferrari{
this.mType = Vehicle.Types.MotorCar;
this.mName = "MotorCar";
}
@Override
public int getType(){
return mType;
}
@Override
public String getName(){
return mName;
}
}
public class Yamaha extends Vehicle{
public Yamaha{
this.mType = Vehicle.Types.Bike;
this.mName = "Bike";
}
@Override
public int getType(){
return mType;
}
@Override
public String getName(){
return mName;
}
}