RecycleView的使用

来源:互联网 发布:2016版excel数据有效性 编辑:程序博客网 时间:2024/06/08 02:11

在使用的时候首先要导入一个依赖

compile 'com.android.support:recyclerview-v7:23.4.0'

下面是关于RecycleView的方法使用

package com.bwie.recyclerviewdemo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.DividerItemDecoration;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.View;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements MyAdapter.OnItemClickListener {    private RecyclerView recyclerView;    private List<String> list;    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化数据        list = new ArrayList<>();        for (int i = 'A'; i < 'z'; ++i){//A1 ,2   z 98            list.add(""+(char)i);        }        recyclerView = findViewById(R.id.recyclerView);        //设置一个线性布局挂历起布局管理器        //HORIZONTAL 设置水平方向  垂直方向   false true  true 反转 倒着显示  false 顺序显示        //recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));        //设置一个网格管理器        //Vertical 代表显示多少列        //Horizontal 代表显示多少行        //recyclerView.setLayoutManager(new GridLayoutManager(this,3,GridLayoutManager.HORIZONTAL,false));        //瀑布流布局管理器        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));        //设置分割线        recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));        //添加条目动画        recyclerView.setItemAnimator(new DefaultItemAnimator());        //设置适配器        adapter = new MyAdapter(this,list);        recyclerView.setAdapter(adapter);        //设置点击事件        adapter.setOnItemClickListener(this);    }    public void btnAddItem(View view){        adapter.addItem("我们不一样");    }    @Override    public void setOnItemClick(View view, int position) {        //条目点击事件        //Toast.makeText(this, "条目" + position, Toast.LENGTH_SHORT).show();        adapter.removeItem(position);    }    @Override    public void setOnItemLongClick(View view, int position) {        //长按事件        Toast.makeText(this, "长按条目"+position, Toast.LENGTH_SHORT).show();    }}


为recycleview添加适配器
package com.bwie.recyclerviewdemo;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import org.w3c.dom.Text;import java.util.ArrayList;import java.util.List;import java.util.Random;/** * Created by stephen on 2017/12/7. */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {    private static final int TYPE_ONE = 0;    private static final int TYPE_TWO = 1;    private Context context;    private List<String> list;    //存放没一个View的随机高度    private List<Integer> heightList;    public MyAdapter(Context context, List<String> list){        this.context = context;        this.list = list;        //创建存放View随机高度的集合        heightList = new ArrayList<>();        for (int i = 0;i < list.size();i++){            //产生随机高度            int height = new Random().nextInt(200)+100;            heightList.add(height);        }    }    /**     *     * @param parent     * @param viewType     * @return     */    @Override    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //System.out.println("字段值 :"+viewType);viewType 服务器的字段        View view = null;        /*switch (viewType) {            case TYPE_ONE: {                view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);            }            break;            case TYPE_TWO: {                view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);            }            break;        }*/        view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);        ViewHolder viewHolder = new ViewHolder(view);        return viewHolder;    }    /**     * 删除一个条目     * @param position 删除的条目位置     */    public void removeItem(int position){        list.remove(position);        //notifyDataSetChanged();        notifyItemRemoved(position);    }    /**     * 向RecyclerView中添加一个Item     * @param     * @param data     */    public void addItem(String data){        list.add(data);        notifyItemInserted(list.size()-1);    }    //声明自己的一个事件回调接口    public interface OnItemClickListener{        //条目点击事件        void setOnItemClick(View view,int position);        //条目长按事件        void setOnItemLongClick(View view,int position);    }    private OnItemClickListener onItemClickListener;    public void setOnItemClickListener(OnItemClickListener onItemClickListener){        this.onItemClickListener = onItemClickListener;    }    @Override    public void onBindViewHolder(MyAdapter.ViewHolder holder, final int position) {        //获取到设置View属性的对象        ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();        //重新定义高度        params.height = heightList.get(position);        //保存之前所定义的高度        holder.itemView.setLayoutParams(params);        if(position %2 == 0) {            //设置文本            holder.tv.setText(list.get(position));        }else{            holder.tv.setText(list.get(position));        }        if(null != onItemClickListener)        {            //回调点击事件            holder.itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    //回调                    onItemClickListener.setOnItemClick(v,position);                }            });            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {                @Override                public boolean onLongClick(View v) {                    onItemClickListener.setOnItemLongClick(v,position);                    return true;//消费掉                }            });        }    }    @Override    public int getItemCount() {//条目数        return list != null?list.size():0;    }    //获得View的类型    @Override    public int getItemViewType(int position) {        //奇数这个不局,偶数加载另外一个布局        if(position %2 == 0){            return TYPE_ONE;        }else{            return TYPE_TWO;        }    }    //生命我们自己的ViewHolder    class ViewHolder extends RecyclerView.ViewHolder{        TextView tv;        //View itemViews;        public ViewHolder(View itemView) {            super(itemView);            //itemViews = itemView;            tv = itemView.findViewById(R.id.tv);        }    }}



原创粉丝点击