今天来聊下RecyclerView。RecyclerView的定位是用来取代ListView的,它的使用也很简单,一句话来说就是在Activity里new一个RecyclerView,然后用setAdapter把数据添加进去即可。下面通过一个简单的例子来看看RecyclerView的使用。
新建一个Android Studio Project,选择blank Activity,点finish。MainActivity的onCreate的代码如下:
//MainActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 新建一个RecyclerView
recyclerView = new RecyclerView(this);
// 设为启动显示的view
setContentView(recyclerView);
// 添加LinearLayout
//recyclerView.setLayoutManager(new LinearLayoutManager(this));
//recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,true));
// 添加GridLayout
recyclerView.setLayoutManager(new GridLayoutManager(this,3));
//添加数据
recyclerView.setAdapter(new MyAdapter());
}
新建一个class,继承RecyclerView.Adapter,并复写onCreateViewHolder
、onBindViewHolder
及getItemCount
三个函数
// MyAdapter
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//return new ViewHolder(new TextView(parent.getContext()));
// 调用资源文件
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell, null));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
CellData cdata = cellData[position];
ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.getTvTitle().setText(cdata.getTitle());
viewHolder.getTvContent().setText(cdata.getContent());
}
@Override
public int getItemCount() {
return cellData.length;
}
onCreateViewHolder
中return的时候,我们使用了自定义的资源文件list_cell,另外ViewHolder是我们自己定义的类并继承RecyclerView.ViewHolder,通过ViewHolder,我们可以控制新建的RecyclerView里的内容
// MyAdapter ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder {
private View view;
private TextView tvTitle, tvContent;
public ViewHolder(View itemView) {
super(itemView);
view = itemView;
// list_cell布局文件中的控件
tvTitle = (TextView) itemView.findViewById(R.id.tvTitle);
tvContent = (TextView) itemView.findViewById(R.id.tvContent);
}
public View getTextView() {
return view;
}
public TextView getTvTitle() {
return tvTitle;
}
public TextView getTvContent() {
return tvContent;
}
}
//list_cell
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvTitle"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvContent"/>
</LinearLayout>
刚开始学习,这里只是记录一些自己觉得重要的东西,如果以后有新的认识,也会更新上来。