一、目标
迭代需求,要求实现一个多状态的类似GridView控件,这次我们就使用RecyleView来做实现,废话不多说,先看效果图:
具体的代码调用:
…
private RecyclerView recyclerView;
private GridManager manager;
private List myTableDatas;
protected void bindExtraUserTemplate(final Object extra) {
…
if(manager == null){
manager = new GridManager(PwStaffMyTableActivity.this, recyclerView);
}
myTableDatas = generatesDatas(tempPwTableVo);
manager.setDatas(myTableDatas);
recyclerView.setVisibility(View.VISIBLE);
manager.setOnGridItemClickListener(new GridManager.OnGridItemClickListener() {
@Override
public void onGridItemClick(int linearIndex, int row, int col, GridItem item) {
Toast.makeText(TestPlanGridActivity.this,
"linearIndex = " + linearIndex + " row = " + row
+ " col = " + col + " item = " + item, Toast.LENGTH_LONG).show();
}
});
...
}
…
二、RecyleView使用回顾
必须解释下RecyclerView的这个名字了,从它类名上看,RecyclerView代表的意义是,我只管Recycler View,也就是说RecyclerView只管回收与复用View,其他的你可以自己去设置。可以看出其高度的解耦,给予你充分的定制自由
2.1 创建Adapter
…
private List mDatas;
class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
{
//类似于ListAdapter.getView中的返回ViewHolder部分
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
HomeActivity.this).inflate(R.layout.item_home, parent,
false));
return holder;
}
//类似于ListAdapter.getView中的数据绑定部分
@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
holder.tv.setText(mDatas.get(position));
}
@Override
public int getItemCount()
{
return mDatas.size();
}
class MyViewHolder extends ViewHolder
{
TextView tv;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
}
}
}
…
2.2 使用
…
private RecyclerView mRecyclerView;
private HomeAdapter mAdapter;
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//2.2.1 设置布局管理器
mRecyclerView.setAdapter(mAdapter = new HomeAdapter());//2.2.2 设置adapter
mRecyclerView.setItemAnimator(new DefaultItemAnimator()); //2.2.3 设置Item增加、移除动画
mRecyclerView.addItemDecoration(new DividerItemDecoration(//2.2.4 添加分割线
getActivity(), DividerItemDecoration.HORIZONTAL_LIST));
…
2.3 更多
-
[DividerItemDecoration 源码解析]:分割线解析
-
[DefaultItemAnimator ]:动画解析
-
[为RecyleView设计点击事件]
-
[(4.1.45.1)RecyclerView 添加头部和尾部布局: 仿ListView.HeaderViewListAdapter装饰器模式] (http://blog.csdn.net/fei20121106/article/details/54290723)
-
(4.1.45.3)Android 优雅的为RecyclerView添加HeaderView和FooterView:List\Grid\瀑布流