0

codeAdaptershow data中使用以下内容到RecyclerView,但现在我想使用不同的布局ArrayList同一个RecyclerView 中显示其他数据(例如:第 1 位和第 6 位)。some positions

那个不同的布局(假设:another_layout.xml)包含2个 TextViews一个 Image,也想为那个布局实现点击监听器..

    @Override
    public PlaylistCardAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // inflate a card layout
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.youtube_video_card, parent, false);
        // populate the viewholder
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }
4

4 回答 4

1

用于多个布局的 RecyclerView
1. 覆盖 getItemViewType(int position) 方法
例如,我有两个布局 layout1 和 layout2。我希望 layout1 在顶部,然后是 layout2。所以 getItemViewType 会是这样的

@Override
public int getItemViewType(int position) {

    if(position == 0){    //for layout1
        return 1;
    }else{
        return 2;        //for layout2
    }
}

2.这样的每个布局都有不同的viewholder

class ViewHolder_LayoutOne extends RecyclerView.ViewHolder{
    TextView name;
    //Constructor
}

class ViewHolder_LayoutTwo extends RecyclerView.ViewHolder{
    TextView name;
    //Constructor
}

3.根据位置充气不同的布局

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

    RecyclerView.ViewHolder vh = null;
    if(viewType == 1){

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_layout_one,parent,false);
        vh = new MyViewHolder_LayoutOne(view);
    }else if(viewType == 2){

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_layout_two,parent,false);
        vh = new MyViewHolder_LayoutTwo(view);
    }
    return vh;
}

4、根据岗位绑定意见

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


    switch(getItemViewType(position)){

        case 1: //for layout 1
            ((ViewHolder_LayoutOne)holder).name.setText("");
            break;

        case 2:// for layout 2
            ((ViewHolder_LayoutTwo)holder).name.setText("");
            break;
    }
}

5.Now 最重要的getItemCount()方法 //返回浏览次数

@Override
public int getItemCount() {
    return toptitles.length + 1; 
   // as i have only layout at the top and the remaining size equals the length of the array toptitles.So the overall length would be 
   //number of views of layout1 + number of views of layout2
}

希望这可以帮助!!!

于 2016-12-13T09:04:05.183 回答
0

您需要像这样覆盖getItemViewType

@Override
    public int getItemViewType(int position) {
      Add your condition and return viewType(Constant)
    }

现在,检查 viewType 并相应地重新运行 viewHolder。

    @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          if (viewType == VIEWHOLDER1) {
                View v = LayoutInflater.from(activity).inflate(R.layout.layout1, parent, false);
                return new ViewHolder1(v);
          }else if(viewType == VIEWHOLDER2){
                View v = LayoutInflater.from(activity).inflate(R.layout.layout2, parent, false);
                return new ViewHolder2(v);
          }
        }

现在,检查 viewHolder 的实例

@Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
         if (holder instanceof ViewHolder1) {
             Show values in UI accordingly.
         }else if(holder instanceof ViewHolder2){
             Show values in UI accordingly.
         }
}
于 2016-12-13T08:40:34.590 回答
0

您可以使用所需的布局在 getItemViewType(int position) 中设置所需的类型。并且 onCreateViewHolder 您可以检查 viewType 并相应地膨胀该行。

这是一个例子。

于 2016-12-13T08:50:55.120 回答
0

您可以覆盖getItemViewType,并为不同的布局使用不同的 ViewHolder。

于 2016-12-13T08:31:39.590 回答