一、简介
RecyclerView是ViewGroup的子类,每一个列表项都作为一个View子对象显示的。
RecyclerView是Android L版本中新添加的一个用来取代ListView的SDK。
RecyclerView自身不会创建视图,它创建的是ViewHolder,而ViewHolder引用这一个一个itemView。
TODO:准备修缮(2017/9/7 18:24:43 )
二、依赖包
因item使用cardview展现,如不了解可点击查阅cardview用法
1 | compile 'com.android.support:recyclerview-v7:24.0.0' |
三、布局文件
代码稍微有点多,先放点布局文件
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" />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代码
主餐上了,简要介绍下,详细内容请查看源码
添加RecyclerView视图
1
2
3
4
5
6
7
8
9mRecyclerView = (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);定义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
27private 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());
}
// 点击事件
public void onClick(View view) {
Toast.makeText(MainActivity.this,mData.getTitle(),Toast.LENGTH_SHORT).show();
}
}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
31private class MyAdapter extends RecyclerView.Adapter<myItemData> {
private List<MyData> mDatas;
public MyAdapter(List<MyData> datas) {
mDatas = datas;
}
//创建布局
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);
}
//设置数据
public void onBindViewHolder(myItemData holder, int position) {
MyData data = mDatas.get(position);
holder.bindData(data);
}
public int getItemCount() {
return mDatas.size();
}
}
大概就这样吧,数据的代码没有挂出来
源码地址:https://github.com/sdwfqin/AndroidSamples