RecyclerView的多布局实现

多布局主类:

package com.example.work_6_26_second;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;

import com.example.work_6_26.R;

import java.util.ArrayList;

public class Activity_head extends AppCompatActivity {
    RecyclerView recyclerView;
    MyRecycAdapter adapter;
    ArrayList<String> datas = new ArrayList<>();
    View head;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_head);
        initDatas();
        initView();
        initHead();
    }

    private void initHead() {
        head = View.inflate(this,R.layout.head,null);
        adapter.setHeadView(head);
    }

    private void initDatas() {
        for (int i =0; i < 80;i++){
            datas.add("第:"+(i+1)+"个元素");
        }
    }

    private void initView() {
        recyclerView = findViewById(R.id.rec);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);
        adapter = new MyRecycAdapter(this);
        adapter.setDatas(datas);
        recyclerView.setAdapter(adapter);
    }
}

多布局适配器类:

package com.example.work_6_26_second;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.work_6_26.R;

import org.w3c.dom.Text;

import java.util.ArrayList;

public class MyRecycAdapter extends RecyclerView.Adapter<ViewHolderSecond> {
    ArrayList<String> datas = new ArrayList<>();
    Context context;
    View headView;
    private final int TYPE_ONE = 1;
    private final int TYPE_TWO = 2;
    public void setDatas(ArrayList<String> datas){
        this.datas.clear();
        this.datas.addAll(datas);
        notifyDataSetChanged();
    }
    public void setHeadView(View headView){
        this.headView = headView;
    }

    public MyRecycAdapter(Context context) {
        this.context = context;
    }

    @NonNull
    @Override
    public ViewHolderSecond onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if(i == TYPE_ONE){
            ViewHolderSecond second = new ViewHolderSecond(headView);
            return second;
        }else{
            ViewHolderSecond second = new ViewHolderSecond(LayoutInflater.from(context).inflate(R.layout.item_me, viewGroup, false));
            return second;
        }
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolderSecond viewHolderSecond, int i) {
        if(i == 0&&headView != null){
            return;
        }else{
            TextView textView = (TextView) viewHolderSecond.getView(R.id.txt);
            if(headView != null){
                textView.setText(datas.get(i-1));
            }else{
                textView.setText(datas.get(i));
            }
        }
    }

    @Override
    public int getItemCount() {
        int size = datas.size();
        if(headView != null){
            size++;
        }
        return size;
    }

    @Override
    public int getItemViewType(int position) {
        if(position == 0&&headView != null){
            return TYPE_ONE;
        }else{
            return TYPE_TWO;
        }
    }
}

多布局ViewHolder类:

package com.example.work_6_26_second;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;

import com.example.work_6_26.R;

public class ViewHolderSecond extends RecyclerView.ViewHolder {

    SparseArray<View> views = new SparseArray<>();

    public ViewHolderSecond(@NonNull View itemView) {
        super(itemView);
    }

    public View getView(int id){
        View view = views.get(id);
        if(view == null){
            view = itemView.findViewById(R.id.txt);
            views.put(id,view);
        }
        return view;
    }

}

效果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44946212/article/details/93781599