您的位置:首页 > 其它

recyclerview+swiperefreshlayout实现GridView下拉刷新,上拉加载更多

2016-08-04 17:10 691 查看
先看效果图:实现:public class TestAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {//正常条目private static final int TYPE_NORMAL_ITEM = 0;//加载更多private static final int TYPE_FOOTER_ITEM = 1;private View footerView;RecyclerView.LayoutManager mlayoutManager;private List<String> mDatas;Context context;public TestAdapter(RecyclerView.LayoutManager mlayoutManager, List<String> list, Context context) {this.mlayoutManager = mlayoutManager;mDatas = list;this.context = context;}public interface OnItemClickLitener {void onItemClick(View view, int position);void onItemLongClick(View view, int position);}private OnItemClickLitener mOnItemClickLitener;public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {this.mOnItemClickLitener = mOnItemClickLitener;}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {if (viewType == TYPE_NORMAL_ITEM) {ItemViewHolder holder = new ItemViewHolder(LayoutInflater.from(context).inflate(R.layout.testitem, parent, false));return holder;} else {footerView = LayoutInflater.from(parent.getContext()).inflate(R.layout.footerview, null);GridLayoutManager.LayoutParams params = new GridLayoutManager.LayoutParams(GridLayoutManager.LayoutParams.MATCH_PARENT,GridLayoutManager.LayoutParams.WRAP_CONTENT);((GridLayoutManager) mlayoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {int type = getItemViewType(position);if (type == TYPE_FOOTER_ITEM) {return 2;} else {return 1;}}});footerView.setLayoutParams(params);return new FooterViewHolder(footerView);}}public void setFooterNoMore(String txt) {TextView tv_footer = (TextView) footerView.findViewById(R.id.tv_footer);ContentLoadingProgressBar progress = (ContentLoadingProgressBar) footerView.findViewById(R.id.progress);progress.setVisibility(View.INVISIBLE);tv_footer.setText(txt);}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {if (holder instanceof ItemViewHolder) {((ItemViewHolder) holder).tv.setText(mDatas.get(position));if (mOnItemClickLitener != null) {((ItemViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {CommonUtils.toast(context, mDatas.get(position));}});}}}@Overridepublic int getItemCount() {return mDatas.size();}@Overridepublic int getItemViewType(int position) {if (position + 1 == getItemCount()) {return TYPE_FOOTER_ITEM;} else {return TYPE_NORMAL_ITEM;}}class ItemViewHolder extends RecyclerView.ViewHolder {TextView tv;public ItemViewHolder(View view) {super(view);tv = (TextView) view.findViewById(R.id.id_num);}}class FooterViewHolder extends RecyclerView.ViewHolder {TextView tv;public FooterViewHolder(View view) {super(view);tv = (TextView) view.findViewById(R.id.id_num);}}}
public class TestActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener, TestAdapter.OnItemClickLitener {
SwipeRefreshLayout swipeRefreshLayout;
RecyclerView recyclerView;
private List<String> mDatas;
MyHandler myHandler;

int lastVisibleItem;
TestAdapter adapter;
RecyclerView.LayoutManager layoutManager;

@Override
public void onItemClick(View view, int position) {

}

@Override
public void onItemLongClick(View view, int position) {

}

class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) {
swipeRefreshLayout.setRefreshing(false);
} else if (msg.what == 1) {
adapter.setFooterNoMore("全部加载完");
}
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);

myHandler = new MyHandler();
initdata();

swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.black), getResources().getColor(R.color.colorAccent), getResources().getColor(R.color.green));
swipeRefreshLayout.setOnRefreshListener(this);

layoutManager = new GridLayoutManager(this, 2);
adapter = new TestAdapter(layoutManager, mDatas, this);
adapter.setOnItemClickLitener(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);

recyclerView.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()) {
// 此处在现实项目中,请换成网络请求数据代码,sendRequest .....
myHandler.sendEmptyMessageDelayed(1, 3000);
}
}

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastVisibleItem = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition();
}
});

}

private void initdata() {
mDatas = new ArrayList<String>();
for (int i = 1; i < 120; i++) {
mDatas.add("zzz" + i);
}
}

@Override
public void onRefresh() {
CommonUtils.toast(this, "刷新~~~");
myHandler.sendEmptyMessageDelayed(0, 5000);
}
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐