您的位置:首页 > 其它

recyclerview添加上拉加载显示加载状态

2017-06-05 17:50 363 查看
上拉加载

rvExam.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager();
int totalItemCount = recyclerView.getAdapter().getItemCount();
int lastVisibleItemPosition = lm.findLastVisibleItemPosition();
int visibleItemCount = recyclerView.getChildCount();
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& lastVisibleItemPosition == totalItemCount - 1
&& visibleItemCount > 0 && page < mPageCount) {
//加载更多          presenter.getCoursePackageDetailExamEntity(ordDetailId, ++page, 10, examAdapter);
}
}
});


显示加载状态

public class CoursePackageDetailExamAdapter2 extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static Activity act;
private List<T> examList = new ArrayList<>();
private LayoutInflater mLayoutInflater;

public static final int VIEW_TYPE_NORMAL = 0;
public static final int VIEW_TYPE_FOOTER = -1;

public static final int STATE_HIDE = 1;
public static final int STATE_LOADING = 2;
public static final int STATE_NO_MORE = 3;

private static int mState;
private int mPageCount;

public CoursePackageDetailExamAdapter2(Activity act, List<T> list) {
this.act = act;
examList = list;
mLayoutInflater = LayoutInflater.from(act);
mState = STATE_HIDE;
}

public void updateAdapter(List<T> newList, int pageCount) {
mPageCount = pageCount;
examList.addAll(newList);
notifyDataSetChanged();
}

@Override
public int getItemViewType(int position) {//根据数据有几页来判断如果只有一页数据则不显示footer
if (mPageCount == 1) {
return VIEW_TYPE_NORMAL;
} else {
if (position + 1 == getItemCount()) {
return VIEW_TYPE_FOOTER;
} else {
return VIEW_TYPE_NORMAL;
}
}
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_FOOTER) {
return new FooterViewHolder(mLayoutInflater.inflate(R.layout.footer_postlist, parent, false));
} else {
return new MyViewHolder(mLayoutInflater.inflate(R.layout.item_course_package_exam_rv, parent, false));
}
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof FooterViewHolder) {
((FooterViewHolder) holder).itemView.setVisibility(View.VISIBLE);
((FooterViewHolder) holder).bindData(((FooterViewHolder) holder).itemView);
} else {
((MyViewHolder) holder).bindData(examList, position);
}
}

@Override
public int getItemCount() {//如果只有一页数据不显示footer
if (mPageCount == 1) {
return examList == null ? 0 : examList.size();
} else {
return examList == null ? 0 : examList.size() + 1;
}
}

public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public MyViewHolder(View itemView) {
super(itemView);
initView(itemView);
}

private void initView(View itemView) {

}

public void bindData(List<T> examList, int position) {

}

public static class FooterViewHolder extends RecyclerView.ViewHolder {
private ProgressBar pbBar;
private TextView tvNote;

public FooterViewHolder(View itemView) {
super(itemView);
initView(itemView);
}

private void initView(View itemView) {
pbBar = (ProgressBar) itemView.findViewById(R.id.footer_postlist_pbar);
tvNote = (TextView) itemView.findViewById(R.id.footer_postlist_tv_note);
}

public void bindData(View itemView) {
switch (mState) {
case STATE_LOADING:
tvNote.setText("加载中");
pbBar.setVisibility(View.VISIBLE);
break;
case STATE_NO_MORE:
tvNote.setText("已到底部,没有更多模考了");
pbBar.setVisibility(View.GONE);
break;
case STATE_HIDE:
itemView.setVisibility(View.GONE);
break;
}
}
}

public void setState(int state) {
if (this.mState != state) {
this.mState = state;
updateItem(getItemCount() - 1);
}
}

private void updateItem(int position) {
if (getItemCount() > position) {
notifyItemChanged(position);
}
}


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="horizontal">

<ProgressBar
android:id="@+id/footer_postlist_pbar"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_marginRight="10dp"/>

<TextView
android:id="@+id/footer_postlist_tv_note"
android:layout_width="wrap_content"
android:layout_height="70dp"
android:gravity="center"
android:text="加载中..."/>

</LinearLayout>

</RelativeLayout>


USE :

before get data:

examAdapter.setState(STATE_LOADING);


after get data:

if (pageCurrentNo == pageCount) {
examAdapter.setState(STATE_NO_MORE);
} else {
examAdapter.setState(STATE_HIDE);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐