web-dev-qa-db-ja.com

RecyclerView.AdapterにgetItemId()を実装する正しい方法

ジェネリッククラスがあります

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多くの例のように正しくありません。

9
Sky
  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();
    }
    
13
Bubunyo Nyavor

リストでは、Googleドキュメントで言及されているように、特定の行で利用可能なアイテムのIDのみを返すことができます。

getItemId

リスト内の指定された位置に関連付けられている行IDを取得します。

ただし、RecyclerViewの場合はそうではありません。RecyclerViewでは、各アイテムに一意のIDを返すか、安定したIDがない場合はRecyclerView.NO_ID(-1)を返す必要があります。安定していない値を返さないでください。 (安定値は、データセットの位置が変化しても変化しない一意の値です)

3
Keivan Esbati