使用SwipeRefreshLayout和RecyclerView实现上滑和下拉刷新
来源:互联网 发布:怎么删掉淘宝购买记录 编辑:程序博客网 时间:2024/06/15 17:07
实现上拉和下拉刷新效果可以使用SwipeRefreshLayout+RecyclerView实现。效果大致如下。
1、布局
主要是RecyclerView嵌套在SwipeRefreshLayout中。(PS:不要忘记在gradle中添加这两组件所需的库),代码大致如下
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swipe_refresh_widget"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:paddingTop="@dimen/card_margin">
</android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>
2、实现下拉刷新
在Activity 或者 Fragment中实现下拉刷新操作,主要是使该Activity 或 Fragment 实现SwipeRefreshLayout的OnRefreshListener接口,然后在onRefresh()方法中完成相关的加载操作。如:
public class NewsListFragment extends Fragment implementsSwipeRefreshLayout.OnRefreshListener {
@Bind(R.id.recycle_view)
RecyclerView mRecyclerView;
@Bind(R.id.swipe_refresh_widget)
SwipeRefreshLayout mSwipeRefreshWidget;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_newslist, null);
ButterKnife.bind(this, view);
mSwipeRefreshWidget.setColorSchemeResources(R.color.primary,
R.color.primary_dark, R.color.primary_light,
R.color.accent);
mSwipeRefreshWidget.setOnRefreshListener(this);//设置SwipeRefreshWidget下拉事件监听
return view;
}
/**
* 实现SwipeRefreshLayout.OnRefreshListener接口需要完成的方法
* 下拉刷新数据
*/
@Override
public void onRefresh() {
Log.i("TAG", "调用了onRefresh函数");
//加载数据操作
mNewsPresenter.onLoadNews(mType, pageIndex);
}
}
}
3、实现上拉刷新
下拉刷新的操作主要是交个RecyclerView来完成。首先,创建一个RecyclerView滑动监听器RecyclerView.OnScrollListener;然后书写滑动监听器中需要完成的方法。实现下拉刷新的主要思路是利用滑动监听器来判断是不是滑到RecyclerView的最后一个Item。如果是最后一个Item同时也停止滑动了那么就运行加载操作。代码如下
public class NewsListFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
@Bind(R.id.recycle_view)
RecyclerView mRecyclerView;
@Bind(R.id.swipe_refresh_widget)
SwipeRefreshLayout mSwipeRefreshWidget;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_newslist, null);
ButterKnife.bind(this, view);
mSwipeRefreshWidget.setColorSchemeResources(R.color.primary,
R.color.primary_dark, R.color.primary_light,
R.color.accent);
mSwipeRefreshWidget.setOnRefreshListener(this);//设置SwipeRefreshWidget下拉事件监听
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(mLayoutManager);
//设置动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//设置适配器
mAdapter = new NewsAdapter(getActivity().getApplicationContext());
mRecyclerView.setAdapter(mAdapter);
//设置滑动事件监听器()
mRecyclerView.addOnScrollListener(mOnScrollListener);
onRefresh();
return view;
}
/**
* 实现SwipeRefreshLayout.OnRefreshListener接口需要完成的方法
* 下拉刷新数据
*/
@Override
public void onRefresh() {
Log.i("TAG", "调用了onRefresh函数");
//加载数据
mNewsPresenter.onLoadNews(mType, pageIndex);
}
/**
* RecyclerView滑动监听器
*/
private RecyclerView.OnScrollListenermOnScrollListener = new RecyclerView.OnScrollListener() {
private int lastVisibleItem;
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
//当滑动到最后一个且停止滚动时则网络加载数据
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& lastVisibleItem + 1 == mAdapter.getItemCount()) {
//加载更多
LogUtils.d(TAG, "loading more data");
mNewsPresenter.onLoadNews(mType, pageIndex + Urls.PAZE_SIZE);
}
}
};
}
0 0
- 使用SwipeRefreshLayout和RecyclerView实现上滑和下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- SwipeRefreshLayout和RecyclerView实现下拉刷新和上拉加载
- SwipeRefreshLayout + RecyclerView实现上拉加载和下拉刷新
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉加载更多
- 使用SwipeRefreshLayout和RecyclerView实现仿“简书”下拉刷新和上拉加载更多
- 使用SwipeRefreshLayout和RecyclerView实现仿“简书”下拉刷新和上拉加载更多
- 使用SwipeRefreshLayout和RecyclerView实现仿“简书”下拉刷新和上拉加载更多
- 使用SwipeRefreshLayout和RecyclerView实现仿“简书”下拉刷新和上拉加载更多
- Servlet 生命周期、工作原理
- View的颜色(转载)-3
- JQuery validator
- c/c++和python的三目运算符
- Android 自定义简单实用Dialog
- 使用SwipeRefreshLayout和RecyclerView实现上滑和下拉刷新
- 利用cv_bridge与ROS的SUB通信
- 建立索引的优缺点
- POJ_2406_Power Strings[KMP]
- android 调用系统相册选取照片或者打开相机拍照获取图片
- java时间格式
- Nginx基础
- react native 监听 ios 的home键,监听前后台的变化
- shadowsocks安装配置