RecyclerView封装详解完美用法二
来源:互联网 发布:压力传感器 淘宝 编辑:程序博客网 时间:2024/06/11 21:09
这篇主要是recyclerView实现瀑布流:
一、RecyclerView通用ViewHolder同上篇。
二、然后是适配器:
package com.example.recyclerview;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import java.util.ArrayList;import java.util.List;/** * Created by 11981 on 2016/5/28. * 瀑布流适配器 */public abstract class StaggeredAdapter extends RecyclerView.Adapter<MyViewHolder>{ private List<Integer> mHeights; private LayoutInflater mInflater; private Context mContext; public List<DataDTO> mDatas; private int mlayoutId; public interface OnItemClickListener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); } private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener listener) { this.onItemClickListener = listener; } public StaggeredAdapter(Context context, List<DataDTO> datas,int layoutId) { this.mContext = context; this.mDatas = datas; this.mlayoutId = layoutId; mInflater = LayoutInflater.from(context); mHeights = new ArrayList<Integer>(); for (int i = 0; i <mDatas.size() ; i++) { mHeights.add((int)(100+Math.random()*300)); } } @Override public int getItemCount() { return mDatas.size(); } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { ViewGroup.LayoutParams lp=holder.itemView.getLayoutParams(); lp.height =mHeights.get(position); holder.itemView.setLayoutParams(lp); convert(holder,mDatas.get(position)); setUpItemEvent(holder); } public abstract void convert(MyViewHolder holder,DataDTO datadto); public void setUpItemEvent(final MyViewHolder holder) { if (onItemClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int layoutPosition=holder.getAdapterPosition(); onItemClickListener.onItemClick(holder.itemView, layoutPosition); } }); //longclick holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int layoutPosition=holder.getAdapterPosition(); onItemClickListener.onItemLongClick(holder.itemView,layoutPosition); return false; } }); } } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder viewHolder = new MyViewHolder(mInflater.inflate(mlayoutId, parent, false)); return viewHolder; }// public void addData(int pos,DataDTO datas) {// mDatas.add(pos, datas);// notifyItemInserted(pos);// }// public void deleteData(int pos) { mDatas.remove(pos); notifyItemRemoved(pos); }}三、最后是主类:
package com.example.recyclerview;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.View;import java.util.ArrayList;import java.util.List;/*** * 瀑布流主类 */public class StaggereGridLayoutActivity extends AppCompatActivity{ private RecyclerView mRecyclerView; private List<DataDTO> mDatas; private StaggeredAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.staggere_activity); initDatas(); initViews(); mAdapter = new StaggeredAdapter(this, mDatas, R.layout.item_single_view) { @Override public void convert(MyViewHolder holder, DataDTO datadto) { holder.setText(R.id.id_tv,datadto.getAaa()).setImageResource(R.id.id_img,datadto.getBbb()); } }; mRecyclerView.setAdapter(mAdapter); //设置recyclerview布局管理器 mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL)); mAdapter.setOnItemClickListener(new StaggeredAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { } @Override public void onItemLongClick(View view, int position) { mAdapter.deleteData(position); } }); //设置recycler的Item分割线 //listview转gridview没有列的分割 // mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); } private void initDatas() { mDatas = new ArrayList<DataDTO>(); DataDTO data=new DataDTO(); for (int i = 0; i <20 ; i++) { data.setAaa("abcd"); data.setBbb(R.drawable.ic_menu_delete); mDatas.add(data); }// mDatas = new ArrayList<String>();// for (int i = 'A'; i <= 'z'; i++) {// mDatas.add("" + (char) i);// } } private void initViews() { mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview); }}四、RecyclerView依赖工具类:同上
五、实体类:同上
六、其它的代码:同上
最后在清单文件中注册activity:
<activity android:name=".StaggereGridLayoutActivity"></activity>
完成
0 0
- RecyclerView封装详解完美用法二
- RecyclerView封装详解完美用法一
- RecyclerView用法详解
- Retrofit+RxJava完美封装(二)
- 【Android】RecyclerView详解(二)
- RecyclerView使用详解(二)
- Android RecyclerView使用详解二
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- recyclerview封装
- RecyclerView封装
- RecyclerView封装
- RecyclerView的基本用法 (二)
- (二十七)RecyclerView常用封装、修复及优化
- Creational Patterns Part 1/5: Factory Pattern
- JAVA进阶书籍
- 负载均衡的那些算法们
- Java中switch支持的数据类型
- Graph的那些事儿
- RecyclerView封装详解完美用法二
- ZooKeeper原理及使用
- HaDoop学习
- Leetcode 290. Word Pattern
- 算法7— 判断一个单链表是否有环,如果有,找出环的起始位置
- 【学习】正则表达式
- [实践] Android5.1.1源码 - 在Framework中添加自定义系统服务
- What is Gradle in Android Studio?
- iOS 探讨之 正则表达式