简体   繁体   English

Android Recyclerview 添加其他视图

[英]Android Recyclerview add other view

I currently have a list of items in my recyclerView.我目前在我的 recyclerView 中有一个项目列表。 However, I want to insert a different type of viewHolder at a random position.但是,我想在随机位置插入不同类型的 viewHolder。

I have a layout file my_other_view which I want to insert at a random position in the recyclerview.我有一个布局文件my_other_view ,我想将其插入到 recyclerview 中的随机位置。 The layout file has to be associated with a ViewHolder as well.布局文件也必须与 ViewHolder 相关联。

This is my current RecyclerAdapter class这是我当前的 RecyclerAdapter 类

public class MyAdapter extends RecyclerView.Adapter
{
    private List<MyItem> items;
    private Context context;

    public MyAdapter (Context context, List<MyItem> items)
    {
        this.items = items;
        this.context = context;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
        final View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        holder.itemView.setLongClickable(true);
        ((MyViewHolder) holder).bindData(items.get(position));
    }

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

    @Override
    public int getItemViewType(final int position) {
        return R.layout.my_list_entry;
    }
}

For consistency create the random index as part of your constructor and store it in a local variable.为了一致性,创建随机索引作为构造函数的一部分并将其存储在局部变量中。 Then do something like this然后做这样的事情

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int TYPE_1 = 1;
    private static final int TYPE_2 = 2;

    int randomPos = 0;

    public MyAdapter (Context context, List<MyItem> items){
        this.items = items;
        this.context = context;
        randomPos = new Random().nextInt(items.size());
    }
    @Override
    public int getItemViewType(int position) {
        return position == randomPos ? TYPE_2 : TYPE_1;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (viewType) {
             case TYPE_1: return new ViewHolder1(...);
             case TYPE_2: return new ViewHolder2(...);
         }
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        switch (holder.getItemViewType()) {
            case TYPE_1:
                ViewHolder1 viewHolder1 = (ViewHolder1)holder;
                ...
                break;
            case TYPE_2:
                ViewHolder2 viewHolder2 = (ViewHolder2)holder;
                ...
                break;
        }
    }

    class ViewHolder1 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder1(View itemView){
        ...
        }
    }

    class ViewHolder2 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder2(View itemView){
        ...
    }
}

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM