【发布时间】:2020-08-09 14:06:30
【问题描述】:
在我的代码中,当单击回收器视图中的一个项目时,适配器会被替换为一个新的。在此之后,为新适配器创建一个新的跟踪器和观察器。但是在长按时,会调用先前的观察者。我想知道是否可以从跟踪器中删除观察者或从回收器视图中删除项目触摸侦听器。
String id = "track" + mAdapter.getItemId(0);
if(mAdapter.getTracker() != null) mTracker = mAdapter.getTracker();
else {
mTracker = new DefaultSelectionTracker.Builder<>(id, mRecyclerView,
new MediaKeyProvider(mRecyclerView), setLookup(), StorageStrategy.createLongStorage())
.withSelectionPredicate(SelectionPredicates.<Long>createSelectAnything())
.build();
mAdapter.passTracker(mTracker);
}
((MainActivity) requireActivity()).observeFiles(mTracker, id);
这是创建跟踪器的代码
public class MediaKeyProvider extends ItemKeyProvider {
private RecyclerView mRecyclerView;
public MediaKeyProvider(RecyclerView rv){
super(ItemKeyProvider.SCOPE_MAPPED);
mRecyclerView = rv;
}
@Nullable
@Override
public Object getKey(int position) {
long itemId = mRecyclerView.getAdapter().getItemId(position);
return itemId == -1 ? RecyclerView.NO_ID : itemId;
}
@Override
public int getPosition(@NonNull Object key) {
VideoFileAdapter.ViewHolder vh = (VideoFileAdapter.ViewHolder) mRecyclerView.findViewHolderForItemId((Long) key);
return vh == null ? RecyclerView.NO_POSITION : vh.getAdapterPosition();
}
}
媒体密钥提供者
【问题讨论】:
标签: android android-recyclerview androidx