gpt4 book ai didi

java - Recycler View 不调用 onBindviewHolder

转载 作者:行者123 更新时间:2023-11-30 04:53:58 25 4
gpt4 key购买 nike

当我尝试在回收器 View 中选择一个元素时,不会调用 OnBindViewHolder。我使用的是水平布局,所有元素最初都没有显示(显示 7 个元素中的 4 个,当用户向右移动时,这 3 个元素交替出现)。通常,当用户单击一个元素时,OnBindViewHolder 应该会触发,但它不会发生在我身上。它唯一一次触发是在初始化时。因为它没有触发,所以我无法单击回收器 View 中的任何元素。也许这可能与我的布局有关?我不确定

MyAdapter

public MyAdapter(){
this.setHasStableIds(true);
}


//Set Keys
public void setSelectionTracker(SelectionTracker<Long> selectionTracker) {
this.mSelectionTracker = selectionTracker;
}

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, String dayInit, String numberInit, Boolean isSelected){
scheduleDetails.position = position;
System.out.println("Hit2: " + scheduleDetails.position);

dayView.setText(dayInit);
numberView.setText(numberInit);
view.setSelected(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;
}
}

public MyAdapter(String[] day, String[] number){
days = day;
numbers = number;
}


@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 void onBindViewHolder(MyViewHolder holder, int position) {
String dayInit = days[position];
String numberInit = numbers[position];
Long positions = (long) position;

System.out.println("Position: " + position);

boolean isSelected = false;
if(mSelectionTracker != null){
if(mSelectionTracker.isSelected(positions)){
isSelected = true;
}
holder.bind(position, dayInit, numberInit, isSelected);
}
}

// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return days.length;
}

@Override
public long getItemId(int position) {
return position;
}

最佳答案

已解决

@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;
}
}

System.out.println("Here: " + isSelected);
holder.bind(position, id, dayInit, numberInit, isSelected);
}

@Override
public long getItemId(int position) {
return position;
}

我从 getItemId 检索位置并将其放入我的 id 变量(我使用 setHasStableIds)。此实现不需要点击监听器。这是针对 androidx recyclerview-selection 库

最后我在 MyViewHolder 中声明了这些:

scheduleDetails.position = position; scheduleDetails.identifier = key;

关于java - Recycler View 不调用 onBindviewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59538224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com