【发布时间】:2020-01-01 13:56:10
【问题描述】:
我有一个显示四个数字的回收站视图。 1,2,3,4。当我选择其中任何一个数字时,一切似乎都很好。问题是当我水平滚动并且其他数字填充我的屏幕时:4、5、6、7。
状态 1
状态2
在本例中,在State 1和State 2之间来回滚动,当只选择其中一个时,7和1都被选中
问题:我怎样才能让点击其中一个数字取消选择屏幕上不可见的数字?
适配器:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
private String[] days;
private String[] numbers;
SelectionTracker<Long> mSelectionTracker;
private static MyAdapter myAdapter;
public MyAdapter(String[] day, String[] number){
days = day;
numbers = number;
setHasStableIds(true);
}
//Set Keys
public void setSelectionTracker(SelectionTracker<Long> selectionTracker) {
mSelectionTracker = selectionTracker;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
String dayInit = days[position];
String numberInit = numbers[position];
Long id = getItemId(position);
boolean isSelected = false;
if(mSelectionTracker != null) {
if (mSelectionTracker.isSelected(id)) {
isSelected = true;
}
}
holder.bind(position, id, dayInit, numberInit, isSelected);
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
public TextView dayView, numberView;
public View view;
ScheduleDetails scheduleDetails = new ScheduleDetails();
public MyViewHolder(View itemView){
super(itemView);
view = itemView;
dayView = itemView.findViewById(R.id.day);
numberView = itemView.findViewById(R.id.day_number);
}
void bind(int position, Long key, String dayInit, String numberInit, Boolean isSelected){
scheduleDetails.position = position;
scheduleDetails.identifier = key;
System.out.println("Check: " + position);
dayView.setText(dayInit);
numberView.setText(numberInit);
view.setActivated(isSelected);
}
public ItemDetailsLookup.ItemDetails<Long> getItemDetails(@NonNull MotionEvent motionEvent){
return scheduleDetails;
}
}
static class ScheduleDetails extends ItemDetailsLookup.ItemDetails<Long>{
int position;
Long identifier;
@Override
public int getPosition() {
return position;
}
@Nullable
@Override
public Long getSelectionKey() { return identifier; }
@Override
public boolean inSelectionHotspot(@NonNull MotionEvent e){
return true;
}
}
// Create new views (invoked by the layout manager)
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_layout, parent, false);
MyViewHolder vh = new MyViewHolder(view);
return vh;
}
@Override
public int getItemCount() {
return days.length;
}
@Override
public long getItemId(int position) {
return position;
}
}
【问题讨论】:
-
这似乎是stackoverflow.com/questions/56585352/… 的重复问题 - 您是否尝试过那里提出的解决方案?
标签: java android android-recyclerview