我正在尝试为recyclerview实现新的内部选择机制,该机制在androidx软件包(androidx.recyclerview.selection)中可用,因为它现在也是official tutorial的一部分。
我只关注this example而不是使用Item类对象,而是使用了一个简单的String列表,该列表填充了我的recyclerview。这行之有效,只是现在关键是字符串本身,如果我对多个项目使用相同的文本,它将使选择混乱。我已经尝试实现一些特殊的text + position组合,但似乎没有用。当然,我可以将文本包装在类对象中并且可以工作,但是我想知道如何自己实现键。
public class MyItemKeyProvider extends ItemKeyProvider {
private final String[] itemList;
public MyItemKeyProvider(int scope, String[] itemList) {
super(scope);
this.itemList = itemList;
// doesn't work:
// itemsKeys = new String[itemList.length];
// for(int i = 0; i < itemList.length; i++){
// itemsKeys[i] = itemList[i] + i;
// }
}
@Nullable
@Override
public String getKey(int position) {
return itemList[position];
}
@Override
public int getPosition(@NonNull Object key) {
return Arrays.asList(itemList).indexOf(key);
}
}
在我的ViewHolder中:
@Override
public ItemDetailsLookup.ItemDetails getItemDetails() {
int pos = getAdapterPosition();
return new MyItemDetail(pos, data[pos]); // + pos doesn't work
}
和ItemDetail:
public class MyItemDetail extends ItemDetailsLookup.ItemDetails {
private final int adapterPosition;
private final String selectionKey;
public MyItemDetail(int adapterPosition, String selectionKey) {
this.adapterPosition = adapterPosition;
this.selectionKey = selectionKey;
}
@Override
public int getPosition() {
return adapterPosition;
}
@Nullable
@Override
public Object getSelectionKey() {
return selectionKey;
}
}