RecyclerView的简单使用

来源:互联网 发布:合并报表连续编制知乎 编辑:程序博客网 时间:2024/06/06 19:06


今天更新的是一个RecyclerView的使用,首先它是实现了点击按钮实现的一系列功能



这是它的一个效果图,然后点击按钮可以实现相应的功能,XML不多说了,直接copy

Mainactivity.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal">        <Button            android:id="@+id/btn_add"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="添加"            android:textAllCaps="false" />        <Button            android:id="@+id/btn_delete"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="删除"            android:textAllCaps="false" />        <Button            android:id="@+id/btn_list"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="List"            android:textAllCaps="false" />        <Button            android:id="@+id/btn_grid"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="Grid"            android:textAllCaps="false" />        <Button            android:id="@+id/btn_flow"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="flow"            android:textAllCaps="false" />    </LinearLayout>    <android.support.v7.widget.RecyclerView        android:id="@+id/recyclerview"        android:layout_width="match_parent"        android:layout_height="match_parent"/></LinearLayout>

recycleview_item  (可以按照需求定义,我用的就是一个图片加一段数字)

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@android:color/white"    android:padding="5dp">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="#22000000"        android:gravity="center"        android:orientation="horizontal"        android:padding="5dp">        <ImageView            android:id="@+id/iv_icon"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@mipmap/ic_launcher" />        <TextView            android:id="@+id/tv_title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="3dp"            android:text="Content"            android:textAllCaps="false"            android:textColor="#000000" />    </LinearLayout></RelativeLayout>

创建完布局之后,我们就要写相对应的逻辑代码了


那么首先我们要清楚实现RecyclerView的一些步骤,实现RecyclerView的adapter,然后要用于主类调用方法,接下来我们就先来解读RecyclerView.Adapter


下面是适配器的实现思路

1. 继承RecycleView的adapter

2. 写ViewHolder

3. 在继承RecyclerView.Adapter的类型泛型定义为这个ViewHolder

4. 创建构造方法,把外界的上下文和数据传递到适配器中。

5. 通过mViewHolder获取到控件对象。

6. 在onBindViewHolder方法中进行赋值。

代码如下(含注释):

public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.mViewholder>{   //通过构造函数得到外界的上下文和数据    private final Context context;    private ArrayList<String> datas;    public MyRecycleViewAdapter(Context context, ArrayList<String> datas){        this.context = context;        this.datas = datas;    }    //相当    @Override    public mViewholder onCreateViewHolder(ViewGroup parent, int viewType) {        View itemView = View.inflate(context,R.layout.item_recycleview,null);        //创建viewholder对象        mViewholder mViewholder = new mViewholder(itemView);        return mViewholder;    }    @Override    public int getItemCount() {        return datas.size();    }    class mViewholder extends RecyclerView.ViewHolder{        //控件对象        private ImageView iv_icon;        private TextView tv_title;        public mViewholder(View itemView) {            super(itemView);            iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon);            tv_title = (TextView) itemView.findViewById(R.id.tv_title);            //low点击事件            iv_icon.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    //获取用户点击item的位置                    Toast.makeText(context,"用户点击的图片="+getLayoutPosition(),Toast.LENGTH_LONG).show();                }            });            itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    if(monItemClickListener!=null){                        monItemClickListener.onItemclic(v,datas.get(getLayoutPosition()));                    }                }            });        }    }    interface onItemClickListener{        /**         * 抽象方法,当recycleview某个被点击的时候回调         * @param view  点击的item对象         * @param data  点击时的数据         */        void onItemclic(View view,String data);    }    //创建接口    private onItemClickListener monItemClickListener;    //设置recycleview的某个监听    public  void setOnItemClickListener(onItemClickListener onItemClickListener){        monItemClickListener=onItemClickListener;    }    //相当于getview绑定数据不符的代码,数据和View绑定。    @Override    public void onBindViewHolder(mViewholder holder, int position) {        //根据item得到对应的数据        String data = datas.get(position);        //通过holder对象给控件设置数据        holder.tv_title.setText(data);    }    //添加方法    public void addData(int i, String name) {        datas.add(i,name);        notifyDataSetChanged();    }    //删除方法    public void removeData(int i) {        datas.remove(i);        //更新局部条目,预防重新加载全部布局。//        notifyItemRemoved(0);        //更新        notifyDataSetChanged();    }}


然后下面我们运行的是Mainactivity类,这里我们执行的是点击事件的操作


public class MainActivity extends AppCompatActivity implements View.OnClickListener{    private Button btn_add;    private Button btn_delete;    private Button btn_list;    private Button btn_grid;    private Button btn_flow;    private RecyclerView recyclerview;    private ArrayList<String> datas;    private MyRecycleViewAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initdata();        //设置适配器        adapter = new MyRecycleViewAdapter(this, datas);        recyclerview.setAdapter(adapter);        recyclerview.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));        adapter.setOnItemClickListener(new MyRecycleViewAdapter.onItemClickListener() {            @Override            public void onItemclic(View view, String data) {                Toast.makeText(MainActivity.this,"点击了"+data+"条目",Toast.LENGTH_SHORT).show();            }        });    }    private void initdata() {        datas = new ArrayList<>();        //准备数据集合        for (int i = 0; i < 100; i++) {            datas.add("Content_" + i);        }    }    private void initView() {        btn_add = (Button) findViewById(R.id.btn_add);        btn_delete = (Button) findViewById(R.id.btn_delete);        btn_list = (Button) findViewById(R.id.btn_list);        btn_grid = (Button) findViewById(R.id.btn_grid);        btn_flow = (Button) findViewById(R.id.btn_flow);        recyclerview = (RecyclerView) findViewById(R.id.recyclerview);        //设置点击事件        btn_add.setOnClickListener(this);        btn_delete.setOnClickListener(this);        btn_list.setOnClickListener(this);        btn_grid.setOnClickListener(this);        btn_flow.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.btn_add://D.添加数据                adapter.addData(0,"666666");                break;            case R.id.btn_delete://D.删除数据                adapter.removeData(0);                recyclerview.scrollToPosition(55);                break;            case R.id.btn_list://设置List类型效果                recyclerview.setLayoutManager(new GridLayoutManager(this,1,LinearLayoutManager.VERTICAL,false));                break;            case R.id.btn_grid://设置Grid类型效果                recyclerview.setLayoutManager(new GridLayoutManager(this,2, GridLayoutManager.VERTICAL,false));                break;            case R.id.btn_flow://设置瀑布流类型效果                               break;        }    }}

在MainActivity中我们要用到LayoutManager的管理者对象来控制条目的排列,控制其显示的方式


有人会发现关于瀑布流的代码还没有

这里本人会在下一篇更新,敬请关注