何为RecyclerView
RecyclerView是 com.android.support:v7 包下的一个小部件,是一个用于显示庞大数据集的容器,可取代ListView、 GridView等
RecyclerView优势
- 比 ListView 更高级且更具灵活性
可通过指定布局管理器LayoutManager,极其方便的切换ReyclerView展现形式
- 更流畅的UI滑动
RecyclerView的Adapter默认要求使用ViewHolder,避免在视图复用时的重复inflate() 和 findViewById() 耗时操作
布局管理器 LayoutManager
RecyclerView 提供三种内置布局管理器:
1 LinearLayoutManager 列表显示
recylerview01.png2 GridLayoutManager 网格显示
recylerview02.png3 StaggeredGridLayoutManager 分散对齐网格(瀑布流)
recylerview03.png以上三种布局管理器均可以
垂直或水平滚动!
可继承 RecyclerView.LayoutManager 创建一个自定义布局管理器
如何接入
添加依赖项
dependencies {
...
compile 'com.android.support:appcompat-v7:24.2.0'
}
示例
布局文件加入
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Activity
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private int mSpanCount = 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
//RecyclerView.HORIZONTAL,一个竖着滑一个横着滑
int orientation = RecyclerView.VERTICAL;
//列表显示,最后一个参数如果为true,列表将倒叙显示
mLayoutManager = new LinearLayoutManager(this, orientation, false);
//网格显示
mLayoutManager = new GridLayoutManager(this, mSpanCount, orientation, false);
//分散对齐网格(瀑布流),如果每个item的宽高都固定一致,则和网格显示无差别
mLayoutManager = new StaggeredGridLayoutManager(mSpanCount, orientation);
//为 RecyclerView 指定布局管理器
mRecyclerView.setLayoutManager(mLayoutManager);
DemoAdapter adapter = new DemoAdapter();
adapter.setDatas(constructTestDatas());
mRecyclerView.setAdapter(adapter);
}
private List<String> constructTestDatas() {
List<String> datas = new ArrayList<>();
datas.add("刘一");
datas.add("陈二");
datas.add("张三");
datas.add("李四");
datas.add("王五");
datas.add("赵六");
datas.add("孙七");
datas.add("周八");
datas.add("吴九");
datas.add("郑十");
return datas;
}
}
Adapter
public class DemoAdapter extends RecyclerView.Adapter<DemoAdapter.ViewHolder> {
private final String TAG = getClass().getSimpleName();
private List<String> mDatas;
public DemoAdapter() {
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView mTextView;
ViewHolder(View v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.item_title);
}
}
public void setDatas(List<String> datas) {
mDatas = datas;
notifyDataSetChanged();
}
// 创建视图
@Override
public DemoAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder()");
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_recyclerview_item_view, parent, false);
return new ViewHolder(v);
}
// 为Item绑定数据
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder" + "(" + position + ")");
holder.mTextView.setText(mDatas.get(position));
}
@Override
public int getItemCount() {
return mDatas.size();
}
}
总结
本篇是RecyclerView的入门篇,主要讲解了什么是RecyclerView,RecyclerView的优势以及三种布局管理器的区别,并以Example展示了如何使用RecyclerView。
下一篇
RecyclerView从入门到入神——为RecyclerView添加HeaderView 和 FooterView(二)
网友评论