RecyclerView基础##
recyclerView 作为常见的控件,掌握基础的知识作为必备
刷新功能:
下拉刷新使用SwipeRefreshLayout居多,这里主要贴出上拉加载更多的代码
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int lastVisibleItemPosition = mGridLayoutManager.findLastCompletelyVisibleItemPosition();
if (lastVisibleItemPosition == mGridLayoutManager.getItemCount() - 1) {
//加载更多
page++;
getInfo();
}
}
});
RecyclerView的回调点击事件,这个本可以在adapter里添加点击事件的,但是有时为了方便,需要在RecyclerView的页面或者fragment里面写item的点击事件,采用回调:
在adapter里面写
itemView.setOnClickListener(this);
public void onClick(View v) {
//点击事件
if(onItemClickListener!=null) {
onItemClickListener.onItemClick(getLayoutPosition());
//注意这个方法getLayoutPosition()获取到positon
}
}
//下面是回调
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
this.onItemClickListener = onItemClickListener;
}
private OnItemClickListener onItemClickListener;
public interface OnItemClickListener{
void onItemClick(int position);
}
在RecyclerView的页面里
mWorkPoolAdapter.setOnItemClickListener(new WorkPoolAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
//TODO
}
});
判断是否滚动的监听
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState==RecyclerView.SCROLL_STATE_DRAGGING) {
mWorkPoolAdapter.setListFling(true);//滚动是否加载图片,传值到adapter
}else {
mWorkPoolAdapter.setListFling(false);
}
}
});
RecyclerView的线条不是很好画,这里写一个简单的布局间距,有时候可以代替线条,在布局文件里,其实用一个View就来代替线条了,方便简单。
package com.gaiamount.module_workpool.adapters;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class SpacesItemDecoration extends RecyclerView.ItemDecoration{
private int space;
public SpacesItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view,
RecyclerView parent, RecyclerView.State state) {
int childLayoutPosition = parent.getChildLayoutPosition(view);
if(childLayoutPosition%2==0) {//偶数位
outRect.right = space/2;
} else {//奇数位
outRect.left = space/2;
}
}
}
//下面这句是在recyclerView的页面里面写的,可以设定每个item的间距
mRecyclerView.addItemDecoration(new SpacesItemDecoration(16));//16px