RecyclerView 简单示例

RecyclerView 是现在广泛流行,灵活, 低耦合,代替了ListView,GridView。 具体实现步骤类似有list view 今天就简单介绍下
RecyclerView 在support.v7.包下, 用时候需要配置
具体使用步骤:
一 . 在配置地方搜 support.v7.widget.RecyclerView
配置还后你会发现在自己的 app bulid.geadle 增加了compile 'com.android.support:recyclerview-v7:24.0.0'
二 . 具体情况就和我们使用xml 控件一样
1 在自己布局文件 里用 RecyclerView 控件
2 在activity 里初始化布局文件 findViewById ()
3 创建自己的数据源 list 并且初始化使其有意义
4 写 我们的适配器
5 在activity 初始化我们的适配器
6 setAdapter(自己的适配器)
以上你会发现,这正是我们ListView 使用步骤现在还没有看到 RecyclerView 的优势,那么继续向下看
三. 在以上第3 步后边 我们获得到布局管理者, 对布局样式进行设置 纵向 LinearLayoutManager.VERTICAL, 横向 HORIZONTAL
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerRV.setLayoutManager(mLayoutManager);
设置添加删除item时候的动画 recyclerRV.setItemAnimator(new DefaultItemAnimator());

四. RecyclerView 没有监听事件,需要我们自己来写接口回调实现 这里具体就不写了
通过以上步骤 就见到 RecyclerView 实现的效果,此时你会发现 展示出来的没有分割线, 这也是需要我们自己手动去完成(示例没有实现)

这时候问题来了,我们常有的ListView ,适配也有那么多种, RecyclerView  的具体要怎么实现呢? 其实也不难,和ListView 大同小异。
  1  自己建个adapter 继承RecyclerView adapter < 自己的ViewHolder >   
  2 重写  getItemCount();  该方法返回数据源长度;
         onCreateViewHolder() ; 初始化ViewHolder  引入item 布局   返回  view
         onBindViewHolder ()    主要是控件进行操作, 监听事件写在这里 类似于List View 的 getView()方法
 3   在该适配器里 写我们的ViewHolder类继承 RecyclerView.ViewHolder类,  并在构造方法里初始化item 布局里控件。

下边看具体代码实现

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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ListActivity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    </LinearLayout

activity

public class RecyclerActivity extends AppCompatActivity {
    RecyclerView recyView;
    List<Persen> persens = new ArrayList<>();
    ListRecyViewAdapter listRecyViewAdapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        recyView = (RecyclerView) findViewById(R.id.recyView);
        initData();
        listRecyViewAdapter = new ListRecyViewAdapter(RecyclerActivity.this, persens);
        //横向
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyView.setLayoutManager(layoutManager);
         //纵向
        //recyView.setLayoutManager(new LinearLayoutManager(this));
        recyView.setAdapter(listRecyViewAdapter);
        listRecyViewAdapter.setListViewClick(new ListRecyViewAdapter.ListViewClick() {
            @Override
            public void listItemClick(View view, int position) {
                Toast.makeText(RecyclerActivity.this,"点击了"+position,Toast.LENGTH_LONG).show();
            }
            @Override
            public void listItemLongClick(View view, int position) {
                Toast.makeText(RecyclerActivity.this,"长按了"+position,Toast.LENGTH_LONG).show();
            }
        });
    }
    private void initData() {
        for (int i = 0; i < 20; i++) {
            Persen persen = new Persen();
            persen.setHeight("身高是175cm");
            persen.setName("小王");
            persens.add(persen);
        }
    }
}

adapter

public class ListRecyViewAdapter extends RecyclerView.Adapter<ListRecyViewAdapter.MyViewHolder> {
    List<Persen> persens;
    Context context;
    private ListViewClick listViewClick;
    public void setListViewClick(ListViewClick listViewClick) {
        this.listViewClick = listViewClick;
    }
    public ListRecyViewAdapter(Context context, List<Persen> persens) {
        this.context = context;
        this.persens = persens;
    }
    @Override
    public int getItemCount() {
        return persens.size();
    }
//返回item的布局
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_listrecy, null));
        return holder;
    }
//对控件的操作
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.nameTV.setText(persens.get(position).getName());
        holder.heightTV.setText(persens.get(position).getHeight());
        //监听事件
        if (listViewClick!=null){
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) { 
                             //自己定义变量是因为自己可以可以增加头和未 这里的点击位置保持
                   int pos = holder.getLayoutPosition();
                    listViewClick.listItemClick(holder.itemView, pos );
                }
            });
            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                      int pos = holder.getLayoutPosition();
                    listViewClick.listItemLongClick(holder.itemView, pos );
                    return true;
                }
            });
        }
    }
//内部类初始化item 布局控件
    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView nameTV, heightTV;
        public MyViewHolder(View itemView) {
            super(itemView);
            nameTV = (TextView) itemView.findViewById(R.id.nameTV);
            heightTV = (TextView) itemView.findViewById(R.id.heightTV);
        }
    }
    public interface ListViewClick {
        void listItemClick(View view, int position);
        void listItemLongClick(View view, int position);
    }
}

以上就是简单使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值