RecyclerView使用详解(一)

RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。

与ListView的区别

ListView中convertView是复用的,在RecyclerView中,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持在ViewHolder中,也就是说,假设没有屏幕显示10个条目,则会创建10个ViewHolder缓存起来,每次复用的是ViewHolder,所以他把getView这个方法变为了onCreateViewHolder。

展示一个列表,实现简单交互

现在对RecyclerView的进行简单的使用。在使用RecyclerView之前,先要引入类库~

 compile 'com.android.support:design:25.3.0'
 compile 'com.android.support:recyclerview-v7:25.3.0'

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.title)
    TextView title;
    @BindView(R.id.recycle_view)
    RecyclerView recycleView;

    private List<String> datas = new ArrayList<String>();
    private HomeAdapter homeAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initData();
        initView();
    }

    /**
     * 模拟数据,填充adapter
     */
    private void initData() {
        for (int i = 0; i < 20; i++) {
            datas.add("数据是 " + i);
        }
        homeAdapter = new HomeAdapter(this, datas);
    }

    /**
     * 初始化view
     */
    private void initView() {
        recycleView.setLayoutManager(new LinearLayoutManager(this));
        recycleView.setAdapter(homeAdapter);
    }
}

这里仅仅模拟一些数据,并对RecyclerView进行初始化(设置布局管理器、设置Adapter)。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:paddingLeft="10dp"
        android:background="@color/gainsboro"
        android:gravity="center_vertical"
        android:text="这是标题"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

为了更好的重用,这里单独写了HomeAdapter类~

HomeAdapter.java

/**
 * Created by jinzifu on 2017/4/14.
 */

public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {
    private Context context;
    private List<String> datas;

    public HomeAdapter(Context context, List<String> datas) {
        this.context = context;
        this.datas = datas;
    }

    /**
     * 加载条目布局
     *
     * @param parent
     * @param viewType
     * @return
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_recycle_list, parent, false));
    }

    /**
     * 将视图与数据进行绑定
     *
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        holder.title.setText(datas.get(position));
        Log.d("onBindViewHolder", "索引=" + position);
        holder.layout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "你点击了" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() {
        return datas.size();
    }


    class MyViewHolder extends RecyclerView.ViewHolder {
        private TextView title;
        private LinearLayout layout;

        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.item_title);
            layout = (LinearLayout) itemView.findViewById(R.id.item_layout);
        }
    }
}

这里通过HomeAdapter的构造方法引入上下文和数组,并进行简要的视图逻辑。
item_recycle_list.xml仅仅是一个textview展示,此处省略~

运行效果
这里写图片描述

发现问题了没?

列举下上面出现的问题:
1. 列表展示没有分割线;
2. HomeAdapter里模板类代码很多,有进一步封装的必要;
3. HomeAdapter里视图交互支持有限,如缺少onClickListener等;

接下来我们一步一步优化,我先约会去~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值