2017-03-07 52 views
1

实施getItemId()的正确方法我有泛型类在RecyclerView.Adapter

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; 
    } 
} 

什么是getItemId()正确的方式来实现?我认为return position在许多例子中是不正确的。

回答

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

    interface BaseInterface{ 
        long getId(); 
    } 
    
  2. 变化

    abstract class BaseAdapter<T> extends RecyclerView.Adapter 
    

    abstract class BaseAdapter<T extends BaseInterface> extends RecyclerView.Adapter { 
    

    注:签名改为T extends BaseInterface

  3. 更换

    @Override 
    public long getItemId(int position) { 
        return position; 
    } 
    

    @Override 
    public long getItemId(int position) { 
        return itemsList.get(position).getId(); 
    } 
    
+0

itemsList的类型为。并且只有默认的列表方法 – Sky

+0

和itemsList.get(position)。有对象的方法 – Sky

+0

,我将修改我的答案 – bubunyo

1

在列表中通过谷歌文档提到你只能返回可在特定行项目的ID:

getItemId

获取与列表中的指定位置关联的行ID 。

但是,这不是与RecyclerView的情况下,RecyclerView你必须确保你要么返回一个唯一的ID为每个项目或在没有稳定的Id的情况下,你应该返回RecyclerView.NO_ID(-1)。请避免返回不稳定的值。 (一个稳定的价值将是一个独特的价值即使数据集变化的立场,即不改变)

+0

谢谢。好) – Sky

相关问题