0%

RecyclerView

一、简介

RecyclerView是ViewGroup的子类,每一个列表项都作为一个View子对象显示的。
RecyclerView是Android L版本中新添加的一个用来取代ListView的SDK。
RecyclerView自身不会创建视图,它创建的是ViewHolder,而ViewHolder引用这一个一个itemView。
TODO:准备修缮(2017/9/7 18:24:43 )

二、依赖包

因item使用cardview展现,如不了解可点击查阅cardview用法

1
2
compile 'com.android.support:recyclerview-v7:24.0.0'
compile 'com.android.support:cardview-v7:24.0.0'

三、布局文件

代码稍微有点多,先放点布局文件

  1. RecyclerView

    1
    2
    3
    4
    <android.support.v7.widget.RecyclerView
    android:id="@+id/main_recycler"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  2. items

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    card_view:cardCornerRadius="4dp"
    card_view:cardUseCompatPadding="true">
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:gravity="center">
    <TextView
    android:id="@+id/tv_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="测试"
    android:textSize="20sp"/>
    <TextView
    android:id="@+id/tv_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="测试"/>
    </LinearLayout>
    </android.support.v7.widget.CardView>

    四、java代码

主餐上了,简要介绍下,详细内容请查看源码

  1. 添加RecyclerView视图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    mRecyclerView = (RecyclerView) findViewById(R.id.main_recycler);
    // 创建后转交给LinearLayoutManager对象,在屏幕上定位列表项,并且负责定义屏幕的滚动行为。
    mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

    MyDataLab myDataLab = MyDataLab.getMyData(MainActivity.this);
    List<MyData> myDatas = myDataLab.getDatas();

    mMyAdapter = new MyAdapter(myDatas);
    mRecyclerView.setAdapter(mMyAdapter);
  2. 定义ViewHolder内部类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    private class myItemData extends RecyclerView.ViewHolder implements View.OnClickListener{

    private MyData mData;

    public TextView tv_title;
    public TextView tv_text;

    public myItemData(View itemView) {
    super(itemView);
    // 设置点击监听
    itemView.setOnClickListener(this);

    tv_title = (TextView) itemView.findViewById(R.id.tv_title);
    tv_text = (TextView) itemView.findViewById(R.id.tv_text);
    }
    // 设置内容,在adapter中调用并且传入数据
    public void bindData(MyData myData){
    mData = myData;
    tv_title.setText(mData.getTitle());
    tv_text.setText(mData.getText());
    }
    // 点击事件
    @Override
    public void onClick(View view) {
    Toast.makeText(MainActivity.this,mData.getTitle(),Toast.LENGTH_SHORT).show();
    }
    }
  3. Adapter迭代器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    private class MyAdapter extends RecyclerView.Adapter<myItemData> {

    private List<MyData> mDatas;

    public MyAdapter(List<MyData> datas) {
    mDatas = datas;
    }

    //创建布局
    @Override
    public myItemData onCreateViewHolder(ViewGroup parent, int viewType) {

    LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this);
    View view = layoutInflater.inflate(R.layout.main_items, parent, false);

    return new myItemData(view);
    }

    //设置数据
    @Override
    public void onBindViewHolder(myItemData holder, int position) {

    MyData data = mDatas.get(position);
    holder.bindData(data);
    }

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

大概就这样吧,数据的代码没有挂出来
源码地址:https://github.com/sdwfqin/AndroidSamples