前言
关于RecyclerView的使用这里就不在赘述了,相信网上一搜一大把(本人之前的文章也有简单的使用介绍),这次我们讲的是RecyclerView在使用的过程中,有时候会根据不同的位置加载不同的布局的简单实现,这里只是起到抛砖引玉的作用
效果图
设计思想
•重写RecyclerView.Adapter的getItemViewType(int position),
在此方法中根据不同的position,设置不同的ViewType
•编写具体的RecyclerView.ViewHolder子类(不同子类对应不同View或Layout)
•重写RecyclerView.Adapter的onCreateViewHolder(ViewGroup parent,int viewType)
在此方法中根据我们之前设置的ViewType来返回不同的RecyclerView.ViewHolder的子类
代码
使用RecyclerView需要添加依赖
compile 'com.android.support:recyclerview-v7:24.1.1'
首先是MainActivity布局,很简单的布局
<&#63;xml version="1.0" encoding="utf-8"&#63;>
然后是MainActivity代码
package com.example.hfs.recyclerviewloadlayout; 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.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initData() { Listdescs = new ArrayList<>(); descs.clear(); List images = new ArrayList<>(); images.clear(); for (int i = 1; i <21; i++) { descs.add("测试数据" + (i <10 &#63; "0" + i : i)); } images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); images.add(R.mipmap.ic_launcher); MyAdapter adapter = new MyAdapter(MainActivity.this, descs, images); mRecyclerView.setAdapter(adapter); RecyclerView.LayoutManager manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false); mRecyclerView.setLayoutManager(manager); mRecyclerView.addItemDecoration(new DividerItemDecoration(MainActivity.this, DividerItemDecoration.VERTICAL_LIST)); adapter.setmOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this, "点击了" + position + "位置", Toast.LENGTH_SHORT).show(); } }); } private void initView() { mRecyclerView= (RecyclerView) findViewById(R.id.recyclerview); } }
然后是我们的适配器
package com.example.hfs.recyclerviewloadlayout; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; /** * Created by HFS on 2016/8/24. */ public class MyAdapter extends RecyclerView.Adapter{ private Context mContext; private List descs; private List images; private List allList; private static final int TEXTVIEW_VIEWTYPE = 1; private static final int IMAGEVIEW_VIEWTYPE = 2; public interface OnItemClickListener { void onItemClick(View view, int position); } private OnItemClickListener mOnItemClickListener; public OnItemClickListener getmOnItemClickListener() { return mOnItemClickListener; } public void setmOnItemClickListener(OnItemClickListener mOnItemClickListener) { this.mOnItemClickListener= mOnItemClickListener; } public MyAdapter(Context mContext, List descs, List images) { this.mCOntext= mContext; this.descs = descs; this.images = images; allList = new ArrayList<>(); allList.clear(); for (int i = 0; i
接着就是我们自定义的DividerItemDecoration
package com.example.hfs.recyclerviewloadlayout; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; /** * Created by HFS on 2016/8/24. */ public class DividerItemDecoration extends RecyclerView.ItemDecoration { private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; private Drawable mDivider; private int mOrientation; public DividerItemDecoration(Context context, int orientation) { final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); setOrientation(orientation); } public void setOrientation(int orientation) { if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { throw new IllegalArgumentException("invalid orientation"); } mOrientation = orientation; } @Override public void onDraw(Canvas c, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { drawVertical(c, parent); } else { drawHorizontal(c, parent); } } public void drawVertical(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i
项目地址:https://github.com/Greathfs/RecyclerViewLoadLayout
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。