简体   繁体   English

Recycler View 不调用 onBindviewHolder

[英]Recycler View not calling onBindviewHolder

OnBindViewHolder isn't called when I try to select an element inside the recycler view.当我尝试在回收器视图中选择一个元素时,不会调用 OnBindViewHolder。 I'm using a horizontal layout with all the elements not showing initially (4 out of 7 elements are showing and when user motions to right the 3 elements alternate).我使用的是水平布局,所有元素最初都没有显示(7 个元素中有 4 个正在显示,当用户向右移动时,3 个元素交替显示)。 Usually, when the user clicks an element OnBindViewHolder is supposed to fire but it's not happening for me.通常,当用户单击元素 OnBindViewHolder 时应该会触发,但对我来说却没有发生。 The only time it fires is on initialization.它唯一触发的时间是初始化。 Since it doesn't fire I can't click any of the elements inside the recycler view.由于它不会触发,因此我无法单击回收器视图中的任何元素。 Maybe it might have to do with my layouts?也许这可能与我的布局有关? I'm not sure我不知道

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

SOLVED解决了

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

I retrieved position from getItemId and put that into my id variable (I used setHasStableIds).我从 getItemId 检索位置并将其放入我的 id 变量中(我使用了 setHasStableIds)。 Click Listener isn't needed for this implementation.此实现不需要单击侦听器。 This is for the androidx recyclerview-selection library这是针对 androidx recyclerview-selection 库

Lastly I declared these in MyViewHolder:最后我在 MyViewHolder 中声明了这些:

scheduleDetails.position = position; scheduleDetails.position = 位置; scheduleDetails.identifier = key; scheduleDetails.identifier = 键;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法在 onBindViewHolder 中的 Recycler View adater 中强制转换为 Model - Cannot be cast to Model in Recycler View adater in onBindViewHolder 为什么 onBindViewHolder 索引在 Recycler View 中没有增加? - Why onBindViewHolder index isn't incrementing in Recycler View? 在 onBindViewHolder 侦听器上删除项目时更新回收器视图 - Update recycler view when a item is deleted on onBindViewHolder listener 为什么我的 onBindViewHolder () 根本没有运行,即使我的所有其他回收器视图方法都运行了? - Why does my onBindViewHolder () not run at all even though all my other recycler view methods run? “onBindViewHolder”函数中的Android Recycler View问题“无法从非静态方法调用静态方法” - Android Recycler View problem in "onBindViewHolder" function "static method cannot be called from non-static method" 回收站视图仅显示第一项,即使 onBindViewHolder 和 onCreateViewHolder 为所有项目运行 - Recycler view shows only first item, even though onBindViewHolder and onCreateViewHolder run for all of them 使用 Recycler 视图调用 Api 加载更多 - Load More With Recycler view Calling Api notifyDataSetChanged()没有调用onBindViewHolder - notifyDataSetChanged() is not calling onBindViewHolder 在视图滚动条上限制OnBindViewHolder - Restrict OnBindViewHolder on View scroll onbindViewHolder不接受视图持有者变量 - onbindViewHolder is not accepting view holder variables
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM