RecyclerView的多条目加载,添加头布局

来源:互联网 发布:网络通信安全员证书 编辑:程序博客网 时间:2024/05/31 04:03

           RecyclerView的多条目加载,添加头布局

 要导入recyclerview依赖

 package com.example.day1recyclerview;

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.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;
MainActivity
public class MainActivity extends AppCompatActivity {

    RecyclerView rv;

    List<String> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rv = (RecyclerView) findViewById(R.id.rv);

        initRV();
    }

    public void initRV(){
        //1初始化数据
        initData();
        //2创建一个布局管理器
        LinearLayoutManager manager = new LinearLayoutManager(this);
        rv.setLayoutManager(manager);
        //3创建一个适配器
//        MyRVAdapter adapter = new MyRVAdapter();
        MyRVAdapter1 adapter = new MyRVAdapter1();

        TextView tv = new TextView(this);
        tv.setText("toubu");
        TextView tv1 = new TextView(this);
        tv1.setText("toubu1");
        adapter.addHeader(tv);
        adapter.addHeader(tv1);
        //4关联 绑定
        rv.setAdapter(adapter);
    }
    //模拟数据
    private void initData() {
        list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            list.add("position" + i);
        }
    }

    class MyRVAdapter extends RecyclerView.Adapter<MyRVAdapter.MyViewHolder>{


        //用来创建Holder实例的方法
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            //接受的View类型对象  就是item布局转化成的View对象
            View view = View.inflate(MainActivity.this, R.layout.recycler_item, null);
            MyViewHolder holder = new MyViewHolder(view);
            return holder;
        }

        //
        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            holder.tv.setText(list.get(position));
        }

        @Override
        public int getItemCount() {
            return list == null ? 0 : list.size();
        }

        class MyViewHolder extends RecyclerView.ViewHolder{
            TextView tv;
            //该够造方法接受的itemView参数 就是item布局的view对象
            public MyViewHolder(View itemView) {
                super(itemView);
                tv = (TextView) itemView.findViewById(R.id.tv);
            }
        }
    }

    /**
     * 实现recyclerView的头布局
     * 在adapter中维护一个list《view》集合 全都是header样式
     * header布局文件  只有一个根布局
     * 每次调用addHeader方法时候  list结合中添加一个view对象
     * 然后根据getItemType方法  如果position小于 头view的 list集合的长度 都使用头布局类型
     */
    class MyRVAdapter1 extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

        public static final int TYPE_HEADER = 0;
        public static final int TYPE_ONE = 1;
        public static final int TYPE_TWO = 2;

        List<View> listHeader = new ArrayList<>();

        public void addHeader(View view){
            listHeader.add(view);
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if(viewType == TYPE_HEADER){
                View view = View.inflate(MainActivity.this, R.layout.recycler_header, null);
                MyHeaderHolder holderH = new MyHeaderHolder(view);
                return holderH;
            }else if(viewType == TYPE_ONE){
                View view = View.inflate(MainActivity.this, R.layout.recycler_item, null);
                MyViewHolder holder = new MyViewHolder(view);
                return holder;
            }else{
                View view1 = View.inflate(MainActivity.this, R.layout.recycler_item1, null);
                MyViewHolder1 holder1 = new MyViewHolder1(view1);
                return holder1;
            }

        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if(holder instanceof MyHeaderHolder){
                ((MyHeaderHolder) holder).ll.addView(listHeader.get(position));
            }
            if(holder instanceof MyViewHolder){
                ((MyViewHolder) holder).tv.setText(list.get(position));
            }
            if(holder instanceof MyViewHolder1){
                ((MyViewHolder1) holder).tv.setText(list.get(position));
            }
        }

        @Override
        public int getItemCount() {
            return list == null ? 0 : list.size();
        }

        @Override
        public int getItemViewType(int position) {
            if(position < listHeader.size()){
                return TYPE_HEADER;
            }else if(position % 2 == 0){
                return TYPE_ONE;
            }else {
                return TYPE_TWO;
            }
        }

        class MyViewHolder extends RecyclerView.ViewHolder{
            TextView tv;
            //该够造方法接受的itemView参数 就是item布局的view对象
            public MyViewHolder(View itemView) {
                super(itemView);
                tv = (TextView) itemView.findViewById(R.id.tv);
            }
        }

        class MyHeaderHolder extends RecyclerView.ViewHolder{
            LinearLayout ll;
            //该够造方法接受的itemView参数 就是item布局的view对象
            public MyHeaderHolder(View itemView) {
                super(itemView);
                ll = (LinearLayout) itemView.findViewById(R.id.ll);
            }
        }

        class MyViewHolder1 extends RecyclerView.ViewHolder{
            TextView tv;
            ImageView iv;
            //该够造方法接受的itemView参数 就是item布局的view对象
            public MyViewHolder1(View itemView) {
                super(itemView);
                tv = (TextView) itemView.findViewById(R.id.tv);
                iv = (ImageView) itemView.findViewById(R.id.iv);
            }
        }
    }
}

Layoyt布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.day1recyclerview.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>

</LinearLayout>

 Header头布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/ll"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.day1recyclerview.MainActivity">


</LinearLayout>

item条目布局

item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.day1recyclerview.MainActivity">

    <TextView
        android:padding="10dp"
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

item1

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.day1recyclerview.MainActivity">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"
        />
    <TextView
        android:layout_below="@+id/iv"
        android:padding="10dp"
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>


原创粉丝点击