当前位置: 首页 > 知识库问答 >
问题:

回收器视图未调用OnBindViewWholder

海景曜
2023-03-14

当我尝试在回收器视图中选择一个元素时,不会调用OnBindViewWholder。我使用的是一个水平布局,所有元素最初都不显示(7个元素中有4个显示,当用户向右移动时,3个元素交替显示)。通常,当用户单击一个元素时,OnBindViewWholder应该被激发,但对我来说却没有发生。它只在初始化时触发。因为它没有激发,所以我不能单击回收器视图中的任何元素。也许和我的布局有关?我不确定

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

共有1个答案

庾勇军
2023-03-14

已解决

@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检索了position,并将其放入我的id变量(我使用了setHasStableIds)。此实现不需要单击Listener。这是针对androidx RecolyerView-Selection库的

最后,我在MyViewWholder中声明了这些:

scheduleDetails.position=职位;scheduleDetails.identifier=键;

 类似资料:
  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 主要活动: 适配器:

  • 当我尝试将Image URL解析到ImageView中时,回收器视图不显示,活动为空。我正在使用Picasso将图像加载到适配器类中的onBinfViewHolder方法中。这是相关代码 代表: } RepRvAdapter: } 解析JSON数据的方法: 现在,我有一行解析图像URL的代码被注释掉了。行取消注释后,活动将不再显示。如何获取要在ImageView中解析和显示的图像url?我认为这可

  • 我一直在尝试使用此处的少量指导来实现带有RecyclerView的CollapsingToolbar:http://android-developers.blogspot.co.uk/2015/05/android-design-support-library.html 和这里的项目:https://github.com/chrisbanes/cheesesquare,我目前有以下布局: 来源如下

  • 当点击fab时,snack bar出现,为此我必须使用协调器布局将fab水平移动到snack bar上方。但现在回收器视图的前几个项目是不可见的。它只从项目3开始。能否有人帮助解决这一点和什么改变要做。提前谢谢!!

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我