java - RecyclerView 显示来自 2 种不同布局的数据

标签 java android android-recyclerview recyclerview-layout

我在Adapter类中使用以下代码RecyclerView显示数据,但现在我希望使用不同的布局在相同 RecyclerView 中显示来自其他 ArrayList 的数据(在某些位置,例如:第一个位置和第六个位置)。

那个不同的布局(假设:another_layout.xml)包含2个TextView一个图像,也想要也可以在该布局的监听器上实现点击

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

最佳答案

RecyclerView 具有多种布局
1. 重写 getItemViewType(intposition) 方法
例如,我有两个布局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.根据位置inflate不同的布局

@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.根据立场绑定(bind)你的观点

@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.现在最重要的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
}

希望这有帮助!!!

关于java - RecyclerView 显示来自 2 种不同布局的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41116503/

相关文章:

Android - RecyclerView 和缩放图像

java - Jasper 与不同应用程序之间的通信

java - 覆盖方法可以具有与基类中不同的访问说明符吗?

java - 在 xslt document() 函数的字符串中使用单引号

java - 如何将 jframe 调整为 netbeans 中的屏幕分辨率?

java - 在 Fragment 中使用 Activity 方法

android.content.res.Resources$NotFoundException : String resource ID #0x1 Error

android - 以编程方式从android中的自定义组件创建 ScrollView

android - 在 recyclerview fragment Reandroid 中屏幕旋转后不显示进度条

android - getAdapterPosition() 不返回项目在 RecyclerView 中的位置