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

回收器视图位置比较

曾明诚
2023-03-14

我使用了以下代码。我试图在回收器视图中膨胀多个布局。用这个我得到了铸造错误。无法将ViewWholder1转换为OnBindViewWholder中的ViewWholder(第二个ViewWholder)。通过一些调试,我发现OnCreateViewWholder中的int viewtype调用的位置不同于OnBindViewWholder中的int位置。你能解释一下两者的区别吗?我能做些什么来纠正我的错误?还有,我不确定我的观察。如果我说错了,请指正。

class Adapter_Timeline extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

Vector<TimelineList> vector;
Context mContext;

public Adapter_Timeline(){

}

public Adapter_Timeline(Vector<TimelineList> vector,Context mContext){
        this.vector=vector;
        this.mContext=mContext;
}


@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){

    RecyclerView.ViewHolder viewHolder;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view;

    if(vector.get(viewType).getType() == 0) {
       view  = inflater.inflate(R.layout.item_timeline_rv, parent, false);
        viewHolder = new VH_Timeline_RV(view);
    }else {
        view = inflater.inflate(R.layout.item_timeline_rv_1, parent, false);
       viewHolder = new VH_Timeline_RV_1(view);
    }


    return viewHolder;

}



@Override
public int getItemCount(){
    return vector.size();
}

@Override
public int getItemViewType(int position) {
    if (
            vector.get(position).getType()==0) {

        return 0;

    } else if (vector.get(position).getType()==1) {

        return 1;
    }

    return -1;
}


@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    switch (holder.getItemViewType()) {
        case 0:

            VH_Timeline_RV vh_timeline_rv = (VH_Timeline_RV) holder;
             vh_timeline_rv.simpleDraweeView.setImageURI(vector.get(position).getImage());
            vh_timeline_rv.location.setText(vector.get(position).getLocation());
            vh_timeline_rv.time.setText(vector.get(position).getTime());
            vh_timeline_rv.event.setText(vector.get(position).getName());

            break;

        case 1:
            VH_Timeline_RV_1 vh_timeline_rv_1 = (VH_Timeline_RV_1) holder;
            vh_timeline_rv_1.location.setText(vector.get(position).getLocation());
            vh_timeline_rv_1.time.setText(vector.get(position).getTime());
            vh_timeline_rv_1.event.setText(vector.get(position).getName());
            vh_timeline_rv_1.topic.setText(vector.get(position).getTopic());

            break;
    }

共有1个答案

纪实
2023-03-14

该类型是从适配器重写的getItemViewType方法返回的,您正在尝试将其用作索引,这是您想要的:

if(viewType == 0) {
   view  = inflater.inflate(R.layout.item_timeline_rv, parent, false);
    viewHolder = new VH_Timeline_RV(view);
} else {
   view = inflater.inflate(R.layout.item_timeline_rv_1, parent, false);
   viewHolder = new VH_Timeline_RV_1(view);
}

在RecyclerViewAdapter上,与ListViewAdapter不同,所有视图都在一个方法(OnCreateViewWholder)上创建,所有数据都在方法OnBindViewWholder(position)中设置。

OBS:请不要在命名上加上下划线,除非是静态的、最终的、常量的。

 类似资料:
  • 我有一个包含水平回收视图的具有底部表行为的碎片。回收视图由SnapHelper调整以实现页面效果。它看起来像这样: 在片段中的onCreateView事件中,我设置了Adapter和LayoutManager: 在我设置适配器之后,在MyRecycorAdapter类对象中触发onCreateViewHolder事件,然后是onBindViewHolder: 当我第一次创建这个片段并配置Recyc

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

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

  • 我正在尝试在我的 上实现 ,但我没有得到任何结果。 我遵循了这个教程和这个技巧,但是没有人为我工作。 我已经实现了: 但它不让我编译,因为它们是不同的< code > viewmoder ,因为我创建了两个< code > viewmoder 类,但它们< code >扩展了Recycler。ViewHolder所以我不明白... 我正在尝试这样做,因为我有一个,我希望当列表为空时,它会显示一个,

  • > 我想根据里面的变量文本'job#'单击特定的回收器视图。 但无法执行相同的操作,因为我不知道应该单击的确切位置。 回收器视图的位置不断变化。尝试下面的代码,但它点击静态位置'6' recyclerView=onView(allOf(withId(r.id.recycler_view),issplayed()));recyclerview.perform(actionOnItemAtPositi