两个布局文件,第一个是activity的布局文件,该布局文件要包含一个support v7的recycleview控件,在activity中通过通过id找到该控件,该控件就类似于以前的listview,另一个布局文件是要显示的单个item的布局文件,在对应的adapter 的onCreateViewHolder中找到该view。
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.recyleviewdemo.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
</RelativeLayout>
<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"
>
<TextView
android:id="@+id/recyclerview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="aaaaaaaaa" />
<TextView
android:id="@+id/recyclerview2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello_world2" />
</LinearLayout>
一个activity,它首先通过id找到这个recycleview,然后创建一个线性布局管理器 LinearLayoutManager,目前Google只提供了线性的,就是那个一个一个item了,然后设置布局管理器,也就recycleview.setLayoutManager(LinearLayoutManager),让该布局管理器管理recycleview,然后设置adapter,在new adapter的时候传递要显示的数据参数,最后让这个recycleview设置该适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
// 创建一个线性布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
// 设置布局管理器
recyclerView.setLayoutManager(layoutManager);
// 创建数据集
String[] dataset = new String[100];
for (int i = 0; i < dataset.length; i++){
dataset[i] = "item" + i;
}
// 创建Adapter,并指定数据集
RecyleViewAdapter adapter = new RecyleViewAdapter(dataset);
// 设置Adapter
recyclerView.setAdapter(adapter);
}
一个适配器,该适配器是recycleview的特有的适配器,首先在onCreateViewHolder中找到布局文件,并把该view传递给ViewHolder,让ViewHolder拥有该View,以便实现重复利用,然后再onBindViewHolder中设置view中具体某一个控件的值,
一个ViewHolder,该ViewHolder在适配器内部,作用是找出控件,减少IO次数
public class RecyleViewAdapter extends RecyclerView.Adapter<RecyleViewAdapter.ViewHolder> {
// 数据集
private String[] mDataset;
public RecyleViewAdapter(String[] dataset) {
super();
mDataset = dataset;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
// 创建一个View,简单起见直接使用系统提供的布局,就是一个TextView
//View view = View.inflate(viewGroup.getContext(), android.R.layout.simple_list_item_1, null);
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_item, null);
// 创建一个ViewHolder
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
// 绑定数据到ViewHolder上
viewHolder.mTextView1.setText(mDataset[i]);
viewHolder.mTextView2.setText("eeee");
}
@Override
public int getItemCount() {
return mDataset.length;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView1;
public TextView mTextView2;
public ViewHolder(View itemView) {
super(itemView);
mTextView1 = (TextView) itemView.findViewById(R.id.recyclerview1);
mTextView2 = (TextView) itemView.findViewById(R.id.recyclerview2);
//mTextView = (TextView) itemView;
}
}
}