略略略略~~~..时隔N久..又回来写一篇文章,来记录自己这段时间所做的一些事情…
RecyclerView加载不同布局已经在网上一搜一大把了…为啥我还要在写..不为啥..就因为太久没有使用过RecyclerViewle ..以至于在项目中竟然写Adapter的时候卡壳了…太可怕了…所以来热热手..
-
使用RecyclerView,首先添加依赖:
compile 'com.android.support:recyclerview-v7:23.0.+'
-
Activity 的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="www.fl.com.recyclerviewtest.MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="40dp" android:background="@color/green_title" android:gravity="center" android:text="RecyclerView显示不同的item" /> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout>
-
Activity中的代码
public class MainActivity extends AppCompatActivity { private RecyclerView tRecyclerView; private List<Integer> typeList=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initParam(); initView(); } private void initParam() { typeList.add(2); typeList.add(3); typeList.add(3); typeList.add(1); typeList.add(4); } private void initView() { tRecyclerView= (RecyclerView) findViewById(R.id.recyclerview); TopRecyclerViewAdapter adapter = new TopRecyclerViewAdapter(this, typeList); tRecyclerView.setLayoutManager(new LinearLayoutManager(this)); tRecyclerView.setAdapter(adapter); } }
-
Adapter 代码
public class TopRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final Context context; //布局标识集合 private final List<Integer> typeList; //设置常量 private static final int TYPE_IMG_THREE = 2; private static final int TYPE_IMG_RECYCLER = 3; private static final int TYPE_IMG_RECYCLER_ONE = 1; private static final int TYPE_IMG_RECYCLER_FOUR = 4; public TopRecyclerViewAdapter(Context context, List<Integer> typeList) { this.context = context; this.typeList = typeList; } /** * 根据不同的position,设置不同的ViewType * position表示当前是第几个Item,通过position拿到当前的Item对象,然后判断这个item对象需要那种视图 */ @Override public int getItemViewType(int position) { if (typeList.get(position) == 2) { return TYPE_IMG_THREE; } else if (typeList.get(position) == 3) { return TYPE_IMG_RECYCLER; } else if (typeList.get(position) == 1) { return TYPE_IMG_RECYCLER_ONE; } else if (typeList.get(position) == 4) { return TYPE_IMG_RECYCLER_FOUR; } return 0; } //重写onCreateViewHolder方法,返回一个自定义的ViewHolder(当RecyclerView需要一个ViewHolder时会回调该方法,如果有可复用的View不会回调) @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_IMG_THREE) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview_three, parent, false); ThreeViewHolder threeViewHolder = new ThreeViewHolder(view); return threeViewHolder; } else if (viewType == TYPE_IMG_RECYCLER) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview_hrecyclerview, parent, false); RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view); return recyclerViewHolder; } else if (viewType == TYPE_IMG_RECYCLER_ONE) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycleview_one, parent, false); RecycleViewHolderOne recycleViewHolderOne = new RecycleViewHolderOne(view); return recycleViewHolderOne; } else if (viewType == TYPE_IMG_RECYCLER_FOUR) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycleview_four, parent, false); RecycleViewHolderFour recycleViewHolderFour = new RecycleViewHolderFour(view); return recycleViewHolderFour; } return null; } //填充onCreateViewHolder方法返回的holder中的控件(当一个View需要出现在屏幕上时,该方法会被回调,我们需要再该方法中根据数据来更改视图) @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ThreeViewHolder) { setFloorTwo((ThreeViewHolder) holder, position); } else if (holder instanceof RecyclerViewHolder) { setFloorThree((RecyclerViewHolder) holder); } else if (holder instanceof RecycleViewHolderOne) { setOnePic((RecycleViewHolderOne) holder); } else if (holder instanceof RecycleViewHolderFour) { setFourPic((RecycleViewHolderFour) holder); } } //获取数据的数量(告诉RecyclerView有多少个视图需要显示) @Override public int getItemCount() { return typeList.size(); } private void setFourPic(RecycleViewHolderFour holder) { holder.iv_one.setImageResource(R.color.colorAccent); holder.iv_two.setImageResource(R.color.colorPrimary); } private void setOnePic(RecycleViewHolderOne holderOne) { holderOne.imageView.setImageResource(R.color.colorPrimary); } //设置二楼数据(显示3张图片) private void setFloorTwo(ThreeViewHolder holder, int position) { holder.tvTitle.setText("这里显示三张图片"); } //设置三楼数据(显示N张图片) private void setFloorThree(RecyclerViewHolder holder) { setHRecyclerView(holder.hRecyclerView); } private void setHRecyclerView(RecyclerView hRecyclerView) { HRecyclerViewAdapter hRecyclerViewAdapter = new HRecyclerViewAdapter(context); LinearLayoutManager layoutManager = new LinearLayoutManager(context); layoutManager.setOrientation(OrientationHelper.HORIZONTAL); hRecyclerView.setLayoutManager(layoutManager); hRecyclerView.setHasFixedSize(false); hRecyclerView.setAdapter(hRecyclerViewAdapter); hRecyclerViewAdapter.setOnItemClickListener(new HRecyclerViewAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { Toast.makeText(context, "你点击了" + position + "条", Toast.LENGTH_SHORT).show(); } }); } //三张图片 public class ThreeViewHolder extends RecyclerView.ViewHolder { public TextView tvTitle; public ImageView ivOne, ivTwo, ivThree; public ThreeViewHolder(View itemView) { super(itemView); tvTitle = (TextView) itemView.findViewById(R.id.tv_title); ivOne = (ImageView) itemView.findViewById(R.id.iv_one); ivTwo = (ImageView) itemView.findViewById(R.id.iv_two); ivThree = (ImageView) itemView.findViewById(R.id.iv_three); } } //横向的RecyclerView public class RecyclerViewHolder extends RecyclerView.ViewHolder { public TextView tvTitle; public RecyclerView hRecyclerView; public RecyclerViewHolder(View itemView) { super(itemView); tvTitle = (TextView) itemView.findViewById(R.id.tv_title); hRecyclerView = (RecyclerView) itemView.findViewById(R.id.h_recyclerview); } } public class RecycleViewHolderOne extends RecyclerView.ViewHolder { ImageView imageView; public RecycleViewHolderOne(View itemView) { super(itemView); imageView = (ImageView) itemView.findViewById(R.id.iv_show_one); } } public class RecycleViewHolderFour extends RecyclerView.ViewHolder { ImageView iv_one, iv_two; public RecycleViewHolderFour(View itemView) { super(itemView); iv_one = (ImageView) itemView.findViewById(R.id.iv_one); iv_two = (ImageView) itemView.findViewById(R.id.iv_two); } } }
-
横向的RecyclerView 的Adapter
public class HRecyclerViewAdapter extends RecyclerView.Adapter<HRecyclerViewAdapter.HImageHolder>{ private final Context context; private OnItemClickListener onItemClickListener; public HRecyclerViewAdapter(Context context) { this.context=context; } @Override public HImageHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_hrecyclerview_recyclerview_home, parent, false); HImageHolder hImageHolder = new HImageHolder(view); return hImageHolder; } @Override public void onBindViewHolder(final HImageHolder holder, int position) { if (onItemClickListener!=null){ holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(holder.getLayoutPosition()); } }); } } @Override public int getItemCount() { return 10; } public class HImageHolder extends RecyclerView.ViewHolder{ public ImageView imageView; // 折扣 名字 价格 public TextView tvDiscount,tvName,tvPrice; public HImageHolder(View itemView) { super(itemView); imageView= (ImageView) itemView.findViewById(R.id.imageview); tvDiscount= (TextView) itemView.findViewById(R.id.tv_discount); tvName= (TextView) itemView.findViewById(R.id.tv_name); tvPrice= (TextView) itemView.findViewById(R.id.tv_price); } } public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener=onItemClickListener; } public interface OnItemClickListener{ void onItemClick(int position); } }
Xml布局我就不贴了.感兴趣的同学可以你下载demo看看..很简单…我只是为了练练手..我个人觉得代码这东西就是得经常敲…一段时间不敲就会感觉手生..最后 祝大家周末愉快~~~~~~~~~我明天还要上班…..
Demo下载戳这里——>
点击打开链接
点击打开链接
版权声明:本文为u011011744原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。