在RecyclerView.Adapter中实现getItemId()的正确方法

Sky*_*Sky 8 android adapter recycler-adapter android-recyclerview

我有通用课

public abstract class BaseAdapter<T> extends RecyclerView.Adapter {
  private List<T> itemsList = new ArrayList<>();
  //other override methods

  @Override
    public long getItemId(int position) {
        return position;
    }
}
Run Code Online (Sandbox Code Playgroud)

实现getItemId()的正确方法是什么?我认为return position像许多例子一样不正确.

Bub*_*vor 13

  1. 创建一个基本接口,该接口具有返回类型的方法,long 例如.

    interface BaseInterface{
        long getId(); 
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更改

    abstract class BaseAdapter<T> extends RecyclerView.Adapter 
    
    Run Code Online (Sandbox Code Playgroud)

    abstract class BaseAdapter<T extends BaseInterface> extends RecyclerView.Adapter {
    
    Run Code Online (Sandbox Code Playgroud)

    注意:签名已更改为 T extends BaseInterface

  3. 更换

    @Override
    public long getItemId(int position) {
        return position;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    @Override
    public long getItemId(int position) {
        return itemsList.get(position).getId();
    }
    
    Run Code Online (Sandbox Code Playgroud)