ジェネリッククラスがあります
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
多くの例のように正しくありません。
タイプlong
を返すメソッドを持つ基本インターフェースを作成します。
interface BaseInterface{
long getId();
}
変化する
abstract class BaseAdapter<T> extends RecyclerView.Adapter
に
abstract class BaseAdapter<T extends BaseInterface> extends RecyclerView.Adapter {
注:署名がT extends BaseInterface
に変更されました
交換する
@Override
public long getItemId(int position) {
return position;
}
と
@Override
public long getItemId(int position) {
return itemsList.get(position).getId();
}
リストでは、Googleドキュメントで言及されているように、特定の行で利用可能なアイテムのIDのみを返すことができます。
getItemId
リスト内の指定された位置に関連付けられている行IDを取得します。
ただし、RecyclerViewの場合はそうではありません。RecyclerViewでは、各アイテムに一意のIDを返すか、安定したIDがない場合はRecyclerView.NO_ID
(-1)を返す必要があります。安定していない値を返さないでください。 (安定値は、データセットの位置が変化しても変化しない一意の値です)