您的位置:首页 > 其它

SwipeRefreshLayout添加上拉自动加载

2016-04-16 01:40 253 查看
自带的SwipeRefreshLayout刷新没有上拉自动加载,不是特么的人性化,所以只能我们手动的去添加一下。

Demo用的是recyclerView,根据返回的TYPE去加载不同的布局,当recyclerview滑动到底部的时候去显示加载的那个动画

这个参考了这篇博文的介绍,非常感谢,写的非常好。
http://blog.csdn.net/qibin0506/article/details/49716795
这里并且实现了类似于知乎那种刚进页面就触动动画去加载数据的动画



效果图就不贴了

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener, RecyclerViewUtils.LoadingData {

private SwipeRefreshLayout swipeRefreshLayout;
private RecyclerView recyclerView;
private List<String> mDatas;
private RecyclerViewAdapter adapter;

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

}

private void init() {

mDatas = new ArrayList<>();

swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.srf_layout);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);

swipeRefreshLayout.setOnRefreshListener(this);

swipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(true);
}
});
onRefresh();//必须手动调用一次,否则首次是不会去加载数据的

adapter = new RecyclerViewAdapter(this, mDatas);

recyclerView.setLayoutManager(new LinearLayoutManager(this));

RecyclerViewUtils.OnScrollListener(this, recyclerView);//这个方法是判断recyclerView是否滑动到了底部,里面有一个自动加载的接口

recyclerView.setAdapter(adapter);

}

@Override
public void onRefresh() {

new Handler().postDelayed(new Runnable() {
@Override
public void run() {
adapter.removeAll();
Data.initData(mDatas);
adapter.notifyItemRemoved(adapter.getItemCount());
swipeRefreshLayout.setRefreshing(false);
}
}, 1500);

}

@Override
public void onLoadMore() {//添加的自动加载
//        Toast.makeText(this, "底部", Toast.LENGTH_LONG).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Data.getData(mDatas);
adapter.notifyDataSetChanged();
}
}, 1000);
}
}


Data就是模拟数据的两个方法

public class Data {

public static void initData(List<String> mDatas) {
for (int i = 'A'; i < 'Z'; i++) {
mDatas.add("" + (char) i);
}
}

public static void getData(List<String> mDatas) {
for (int i = 0; i < 10; i++) {
mDatas.add("" + i);
}
}

}


RecyclerViewUtils

public class RecyclerViewUtils {

static LoadingData data;

public static void OnScrollListener(final Activity activity, RecyclerView recyclerView) {

data = (LoadingData) activity;

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

boolean isSlidingToLast = false;

@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();

if (newState == RecyclerView.SCROLL_STATE_IDLE) {

int lastVisibleItem = manager.findLastCompletelyVisibleItemPosition();

int totalItemCount = manager.getItemCount();

if (lastVisibleItem == (totalItemCount - 1) && !isSlidingToLast) {

data.onLoadMore();//当滑动到底部的时候触动这个方法

}
}
}

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);

if (dx > 0) {

isSlidingToLast = true;

} else {

isSlidingToLast = false;

}

}
});
}

public interface LoadingData {

void onLoadMore();

}
}


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