RecyclerView的简单使用

来源:互联网 发布:有没有真的网络兼职 编辑:程序博客网 时间:2024/06/08 19:23

RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视图缓.

1.添加依赖

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

2.RecyclerView的适配器 自己设置Adapter,ViewHolder和点击事件

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{    private Context context;    private ArrayList<String> data;    private View itemView;    private OnItemClickListener onItemClickListener;    private OnItemLongClickListener onItemLongClickListener;    //条目的点击事件    public interface OnItemClickListener{        void onItemClick(View view,int position);    }    //条目的长按点击事件    public interface OnItemLongClickListener{        void onItemLongClick(View view,int position);    }    //对外提供的方法    public void setOnItemClickListener(OnItemClickListener onItemClickListener){        this.onItemClickListener=onItemClickListener;    }    public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener){        this.onItemLongClickListener=onItemLongClickListener;    }    public MyAdapter(Context context, ArrayList<String> data) {        this.context=context;        this.data=data;    }    //打印布局 返回ViewHolder    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        itemView = View.inflate(context,R.layout.list_item,null);        final ViewHolder holder = new ViewHolder(itemView);        //条目点击        itemView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                int position = holder.getLayoutPosition();                //注册点击监听                if(onItemClickListener!=null){                    onItemClickListener.onItemClick(v,position);                }            }        });        //条目长按        itemView.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                int position = holder.getLayoutPosition();                if(onItemLongClickListener!=null){                    onItemLongClickListener.onItemLongClick(v,position);                }                //事件消费,不继续执行                return true;            }        });        return holder;    }    //绑定 赋值    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        holder.tv.setText(data.get(position));    }    //返回条目数    @Override    public int getItemCount() {        return data.size();    }    //定义viewHolder继承自带的viewHolder    class ViewHolder extends RecyclerView.ViewHolder{        private TextView tv;        public ViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }}

3.MainAcitivity中

public class MainActivity extends AppCompatActivity {    private RecyclerView recyclerView;    private ArrayList<String> data = new ArrayList<>();    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        recyclerView = (RecyclerView) findViewById(R.id.recyclerview);        for(int i = 0;i<100;i++){            data.add("content_"+i);        }        //设置布局效果        //recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,3,GridLayoutManager.VERTICAL,false));        adapter = new MyAdapter(MainActivity.this,data);        recyclerView.setAdapter(adapter);        //瀑布流效果        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this, "点击条目"+position, Toast.LENGTH_SHORT).show();            }        });        adapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {            @Override            public void onItemLongClick(View view, int position) {                Toast.makeText(MainActivity.this, "长按条目"+position, Toast.LENGTH_SHORT).show();            }        });    }}


0 0