RecyclerView
RecyclerView 的基本使用
RecyclerView和SwipeRefreshLayout搭配使用实现RecyclerView的下拉刷新和上拉加载
- [X]未解决代码中的待修复的问题
项目中的bug待解决
当首页加载内容全部显示是刷新接口的调用会同时调用加载
布局文件中SwipRefreshLayout中嵌套可滑动的控件RecyclerView
思路
1.通过SwipRefreshLayout的下拉属性来刷新数据
2.通过RecyclerView的Adapter的多布局复用添加HeadView和FootView(加载提示为RecyclerView添加的布局 –加载更多….– ;–加载完毕–)
3.通过RecyclerView的addOnScrollListener()方法监听RecyclerView的滑动
1.布局文件的设置
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_widget"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="@null"
android:scrollbars="vertical" />
</android.support.v4.widget.SwipeRefreshLayout>
2.SwipRefreshLayout的设置
//加载等待时的动画颜色设置 mSwipeRefreshWidget.setColorSchemeColors(Color.BLACK,Color.RED,Color.BLUE,Color.YELLOW);
//加载监听
mSwipeRefreshWidget.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// 刷新的网络加载
}
});
3.RecyclerView的设置
3.1RecyclerView的滑动监听
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& lastVisibleItem + 1 == adapter.getItemCount()) {
if (!isLoadMore) {
// 此处在现实项目中,请换成网络请求数据代码,
} else {
Log.d("whl", "正在加载中");
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastVisibleItem = manager.findLastVisibleItemPosition();
}
});
3.2RecyclerViewd的Adapter的多布局复用显示加载时的加载布局
ps.
class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final int TYPE_FOOT=0;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder = null;
TextView textView = new TextView(parent.getContext());
if (viewType == TYPE_FOOT) {
holder = new footHolder(textView);
} else {
holder = new Holder(textView);
}
return holder;
}
@Override
public int getItemViewType(int position) {
if (datas.get(position).equals("0")) {
return TYPE_FOOT;
}
return 1;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof Holder) {
((Holder) holder).textView.setText(datas.get(position));
} else if (holder instanceof footHolder) {
((footHolder) holder).footView.setText("正在加载");
}
}
@Override
public int getItemCount() {
return datas.size();
}
}
class Holder extends RecyclerView.ViewHolder {
TextView textView;
public Holder(View itemView) {
super(itemView);
textView = (TextView) itemView;
}
}
class footHolder extends RecyclerView.ViewHolder {
TextView footView;
public footHolder(View itemView) {
super(itemView);
footView = (TextView) itemView;
}
}