recycleView基础
android 5.0推出了RecyclerView,号称更快的listview,RecyclerView的布局相关操作交由layoutManager进行管理,这样可以实现相应的水平,垂直以及网格视图,自定义化更强,而listview需要承担数据与布局等多个职责。
recyclerView具有良好的解耦性,但是需要自行定义onItemClickListener,以及增加头布局、脚布局方法。(也可通过不同viewHolder实现)
XRecyclerView的使用
XRecyclerView的下载地址:https://github.com/XRecyclerView/XRecyclerView
XRecyclerView的使用与RecyclerView类似,具体请参考GitHubXrecyclerView说明。
但是,随着项目需求更变对首页数据频繁改动和刷新,发现了一个XRecyclerView的致命缺陷,就是在刷新过程中出现条目闪跳以及出现indexoutofboundsexception异常,当时一脸懵逼,后来在网上查了很多方法,后来找到一种靠谱的,特此记录,以供参考。主要是重写LinearLayoutManager,通过抓取onLayoutChildren以及scrollVerticallyBy方法中的异常,以实现预期效果。代码如下
public class LinearLayoutManagerWrapper extends LinearLayoutManager {
public LinearLayoutManagerWrapper(Context context) {
super(context);
}
public LinearLayoutManagerWrapper(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
public LinearLayoutManagerWrapper(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
try {
super.onLayoutChildren(recycler, state);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
try {
return super.scrollVerticallyBy(dy, recycler, state);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
}
仅供参考。