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
原创粉丝点击