一:布局格式的改变
在使用RecyclerView时,我们感觉并不是很轻松,在初期的构造过程中还是比较复杂的,可是为什么现在这个部件这么受欢迎呢,主要是因为它很强大的灵活性,由于RecyclerView将布局排列全部交给了LayoutManager来处理,通过LayoutManager,我们可以定制不同排列方式的布局。
除了LinearLayoutManager外,还有GridLayoutManager和 StaggeredGridLayoutManager分别提供网格布局和瀑布流格局。那么怎么使用呢?只需要在设置LayoutManager时传入不同的布局就行了。
mRecyclerView.setLayoutManager(new GridLayoutManager(this,3));
第一个参数是Context,第二个参数指定了网格的列数。这样就能很轻松的将线性布局转换成了网格布局。
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(staggeredGridLayoutManager);
上述代码指定布局为瀑布流格局,第一个参数用于指定布局的列数,第二个参数用于指定布局的排列方向。
二:点击事件的处理
RecyclerView没有给我们提供相应的注册点击事件,所以需要我们给子项具体的View注册点击事件。
private class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private TextView tv;
private ImageView mImageView;
private TextView mTextView;
public MyHolder(View itemView) {
super(itemView);
// mImageView = (ImageView) itemView.findViewById(R.id.image);
mTextView= (TextView) itemView.findViewById(R.id.name);
mTextView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"clicked",Toast.LENGTH_SHORT).show();
}
}
三:定制列表项
创建item_view布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:layout_margin="5dp"
>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
这里每个列表项只有一个TextView,需要注意的是上一级LinearLayout中android:layout_height不要定义为match_parent,这样会造成每一个子项都占满整个屏幕,同时android:layout_margin可以为每一项留白,让子项分割开来。
View view = layoutInflate.inflate(R.layout.item_view,parent,false);
最后将上一句中的加载项改为自定义的布局就可以实现自定义列表项了。