Android getItemViewType()-如何返回int值

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?

我想实现具有多种视图类型的RecyclerView。因此,我在适配器类中使用
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;
  }
}