2017-03-07 21 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

相關問題