Recyclerview加载三种布局

废话不多说,直接上代码。  

首先定义一个Activity

package com.example.administrator.my_zky.buju1;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.example.administrator.my_zky.R;

public class MainActivity_Recyclerview extends AppCompatActivity {

    private RecyclerView my_recyclerview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main__recyclerview);
        initView();
        initData();
    }
    
    private void initData() {
        //下面的2代表的一行的size是4
        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4);
        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            //返回position对应的条目所占的size
            @Override
            public int getSpanSize(int position) {
                if (position < 4)
                    //这里返回4,指的是当position满足上面条件时,一个条目占得size是4
                    //也就是说这个条目占一行,因为上面设置的一行的size是4
                    return 4;
                else if (3 <= position && position < 6)
                    //这里返回2,指的是当position满足上面条件时,一个条目占得size是2
                    // 也就是说这个条目占半行,因为上面设置的一行的size是4
                    return 2;
                else
                    //这里返回1,指的是当position满足上面条件时,一个条目占得size是1
                    // 也就是说这个条目占1/4行,因为上面设置的一行的size是4
                    return 1;
            }
        });
        //用来添加分割线
        //mRecy.addItemDecoration();
        //设置管理
        my_recyclerview.setLayoutManager(gridLayoutManager);
        MyRecyclerAdapter adapter = new MyRecyclerAdapter();
        //设置适配器
        my_recyclerview.setAdapter(adapter);
    }
    private void initView() {
        my_recyclerview = (RecyclerView) findViewById(R.id.my_recyclerview);
    }
}
 

定义适配器:

package com.example.administrator.my_zky.buju1;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.administrator.my_zky.R;

/**
 * Created by Administrator on 2018/3/12.
 */

public class MyRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    /*
        上面的ViewHolder是这个适配器必要的泛型,必须有。布局里有几种Type,下面就要写几个自定义的
        ViewHlder,这些自定义的ViewHolder都要继承于RecyclerView.ViewHolder。
    */
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        RecyclerView.ViewHolder viewHolder = null;
        //根据viewType生成viewHolder
        switch (viewType) {
            case 0:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_one, null);
                viewHolder = new VH(view);
                break;
            case 1:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_two, null);
                viewHolder = new VH1(view);
                break;
            case 2:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_three, null);
                viewHolder = new VH2(view);
                break;
        }
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
        //根据条目的类型给holder中的控件填充数据
        int itemViewType = getItemViewType(position);
        switch (itemViewType) {
            case 0:
                VH vh = (VH) holder;
                vh.mTextView.setText("类型1");
                vh.mImageView.setImageResource(R.drawable.ic_launcher_background);

                break;
            case 1:
                VH1 vh1 = (VH1) holder;
                vh1.mTextView.setText("类型2");
                break;
            case 2:
                VH2 vh2 = (VH2) holder;
                vh2.mTextView.setText("类型3");
                break;
        }
    }
    @Override
    public int getItemCount() {
        //获取条目数,模拟数据,这里是写死的
        return 30;
    }
    @Override
    public int getItemViewType(int position) {
        //跟据position对应的条目返回去对应的样式(Type)
        if (position < 4) {
            return 0;
        } else if (4 <= position && position < 6) {
            return 1;
        } else return 2;
    }
}

定义三个item类

package com.example.administrator.my_zky.buju1;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.administrator.my_zky.R;

public class VH extends RecyclerView.ViewHolder {
    TextView mTextView;
    ImageView mImageView;

    public VH(View itemView) {
        super(itemView);
        mImageView= (ImageView) itemView.findViewById(R.id.one_avatar);
        mTextView = (TextView) itemView.findViewById(R.id.one_name);
    }
}

package com.example.administrator.my_zky.buju1;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;

import com.example.administrator.my_zky.R;

/**
 * Created by Administrator on 2018/3/12.
 */

public class VH1 extends RecyclerView.ViewHolder {
    TextView mTextView;
    public VH1(View itemView) {
        super(itemView);
        mTextView= (TextView) itemView.findViewById(R.id.two_content);
    }
}
 
package com.example.administrator.my_zky.buju1;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;

import com.example.administrator.my_zky.R;

/**
 * Created by Administrator on 2018/3/12.
 */

public class VH2 extends RecyclerView.ViewHolder {
    TextView mTextView;
    public VH2(View itemView) {
        super(itemView);
        mTextView= (TextView) itemView.findViewById(R.id.three_name);
    }
}

XML布局

activity的布局:

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



三个item

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/one_avatar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:scaleType="centerCrop"
        android:src="@mipmap/ic_launcher"/>

    <TextView
        android:id="@+id/one_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="第一个item"/>

</LinearLayout>

-------------------------------------------------

<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="100dp"
                android:orientation="horizontal">

    <ImageView
        android:id="@+id/three_avatar"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        app:srcCompat="@mipmap/ic_launcher"/>

    <TextView
        android:id="@+id/three_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        tools:text="名称"/>

</RelativeLayout>

-------------------------------------------------

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/one_avatar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:scaleType="centerCrop"
        android:src="@mipmap/ic_launcher"/>

    <TextView
        android:id="@+id/one_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="第2个item"/>
    <TextView
        android:id="@+id/two_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="第2个item"/>

</LinearLayout>



这样就简单实现了一个Recyclerview的多布局。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@删库跑路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值