点击打开链接这篇文章是接着上篇文章的,上篇文章已经实现了下拉刷新,而要实现RecyclerView的上拉刷新,只要为RecyclerView添加滚动监听事件就可以了,判断RecyclerView的最后一项是否已经显示,并判断用户手势,由这两项决定是否刷新:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if(newState ==RecyclerView.SCROLL_STATE_SETTLING
&&lastVisibleItem+1 == myAdapter.getItemCount()){
swipeRefreshLayout.setRefreshing(true);
mHandler.sendEmptyMessageDelayed(1, 3000);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
}
});
这样写完之后会发现界面显示中没有任何提示可以进行上拉刷新,用户体验可能不太好,所以可以为RecyclerView添加一个尾部,提示用户可以进行上拉刷新操作:
adapter:
class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int OtherItemType = 1;
private static final int FinalItemType = 0;
private String[] list;
public MyAdapter(String[] list) {
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == OtherItemType){
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.simple_text_layout, null);
OtherViewHolder viewHolder = new OtherViewHolder(view);
return viewHolder;
}else {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.recyclerview_final_item, null);
FinalView finalView = new FinalView(view);
return finalView;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof OtherViewHolder){
OtherViewHolder otherViewHolder = (OtherViewHolder) holder;
otherViewHolder.textView.setText(textList[position]);
}
}
@Override
public int getItemViewType(int position) {
if(position+1 == getItemCount()){
return FinalItemType;
}else {
return OtherItemType;
}
}
@Override
public int getItemCount() {
return textList.length+1;
}
class OtherViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
public OtherViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.id_simple_text);
}
}
class FinalView extends RecyclerView.ViewHolder{
public FinalView(View itemView) {
super(itemView);
}
}
}
这样当用户将RecyclerView的最后一项拉到屏幕上时,会将尾部添加到列表上,显示一行文字“上拉加载更多”,
ok,完成
参考:链接