У меня есть Recyclerview, и я использую SelectionTracker. У меня есть предупреждение:
Unchecked assignment: 'androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails' to 'androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<java.lang.Long>'
Это я не могу исправить. Если я удалю <Long>
из класса ItemDetailsLookup, предупреждение переместится в SelectionTracker Builder. Я прикрепил свой код ниже.
Это мои переопределенные классы:
class ListItemSelectionPredicate extends SelectionTracker.SelectionPredicate<Long> {
@Override
public boolean canSetStateForKey(@NonNull Long key, boolean nextState) {
return selectionEnabled;
}
@Override
public boolean canSetStateAtPosition(int pos, boolean nextState) {
return selectionEnabled;
}
@Override
public boolean canSelectMultiple() {
return true;
}
}
class ListItemKeyProvider extends ItemKeyProvider<Long> {
private RecyclerView mRecyclerView;
ListItemKeyProvider(RecyclerView recyclerView) {
super(ItemKeyProvider.SCOPE_MAPPED);
mRecyclerView = recyclerView;
}
@Override
public Long getKey(int pos) {
return listAdapter.getItemId(pos);
}
@Override
public int getPosition(@NonNull Long key) {
ListAdapter.ViewHolder viewHolder
= (ListAdapter.ViewHolder) mRecyclerView.findViewHolderForItemId(key);
return viewHolder.getLayoutPosition();
}
}
class ListItemDetailsLookup extends ItemDetailsLookup<Long> {
private RecyclerView mRecyclerView;
ListItemDetailsLookup(RecyclerView recyclerView) {
mRecyclerView = recyclerView;
}
@Override
public ItemDetails<Long> getItemDetails(@NonNull MotionEvent e) {
View view = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
return view == null
? null
: ((ListAdapter.ViewHolder) mRecyclerView.getChildViewHolder(view)).getItemDetails();
}
}
Предупреждение в этой строке:
return view == null
? null
: ((ListAdapter.ViewHolder) mRecyclerView.getChildViewHolder(view)).getItemDetails();
Вот мое создание экземпляра SelectionTracker, созданного один раз в onCreate.
listTracker = new SelectionTracker.Builder<>(
"list-item-selection"
, listRecycler
, new StableIdKeyProvider(listRecycler)
, new ListItemDetailsLookup(listRecycler)
, StorageStrategy.createLongStorage())
.withSelectionPredicate(
new ListItemSelectionPredicate()
)
.build();
Вот мой метод getItemDetails, он вложен в мой класс viewHolder.
ItemDetailsLookup.ItemDetails<Long> getItemDetails() {
return new ItemDetailsLookup.ItemDetails<Long>() {
@Override
public int getPosition() {
return getAdapterPosition();
}
@Override
public Long getSelectionKey() {
return getItemId();
}
};
}
Предупреждение о приведении типов (я полагаю?) Не должно появляться.