-
Notifications
You must be signed in to change notification settings - Fork 1k
Configuration
王浩 edited this page Jun 14, 2015
·
9 revisions
没有支持eclipse,建议还在用eclipse的小伙伴都开始转android studio吧
在build.gradle添加以下依赖(请使用最新版RecyclerView。新版RecyclerView的addOnScrollListener比旧版的setOnScrollListener的扩展性更强。可以让开发者更具项目需求再次添加自定义滚动监听器。这一点比ListView的设计好很多,在处理ListView时还得用反射获取开发者设置的自定义滚动监听器。)
dependencies {
compile 'com.android.support:recyclerview-v7:22.1.1'
compile 'com.nineoldandroids:library:2.4.0'
compile 'cn.bingoogolapple:bga-refreshlayout:1.0.0@aar'
}
注意:内容控件的高度请使用android:layout_height="0dp"和android:layout_weight="1"
<cn.bingoogolapple.refreshlayout.BGARefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_modulename_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 内容控件 -->
<AnyView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</cn.bingoogolapple.refreshlayout.BGARefreshLayout>
// 让activity或者fragment实现BGARefreshLayoutDelegate接口
public class ModuleNameActivity extends AppCompatActivity implements BGARefreshLayout.BGARefreshLayoutDelegate {
private BGARefreshLayout mRefreshLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_moudlename);
initRefreshLayout();
}
private void initRefreshLayout(BGARefreshLayout refreshLayout) {
mRefreshLayout = (BGARefreshLayout) findViewById(R.id.rl_modulename_refresh);
// 为BGARefreshLayout设置代理
mRefreshLayout.setDelegate(this);
// 设置下拉刷新和上拉加载更多的风格 参数1:应用程序上下文,参数2:是否具有上拉加载更多功能
BGARefreshViewHolder refreshViewHolder = new XXXImplRefreshViewHolder(this, true))
// 设置下拉刷新和上拉加载更多的风格
mRefreshLayout.setRefreshViewHolder(refreshViewHolder);
// 为了增加下拉刷新头部和加载更多的通用性,提供了以下可选配置选项 -------------START
// 设置正在加载更多时的文本
refreshViewHolder.setLoadingMoreText(loadingMoreText);
// 设置整个加载更多控件的背景颜色资源id
refreshViewHolder.setLoadMoreBackgroundColorRes(loadMoreBackgroundColorRes);
// 设置整个加载更多控件的背景drawable资源id
refreshViewHolder.setLoadMoreBackgroundDrawableRes(loadMoreBackgroundDrawableRes);
// 设置下拉刷新控件的背景颜色资源id
refreshViewHolder.setRefreshViewBackgroundColorRes(refreshViewBackgroundColorRes);
// 设置下拉刷新控件的背景drawable资源id
refreshViewHolder.setRefreshViewBackgroundDrawableRes(refreshViewBackgroundDrawableRes);
// 设置自定义头部视图(也可以不用设置) 参数1:自定义头部视图(例如广告位), 参数2:上拉加载更多是否可用
mRefreshLayout.setCustomHeaderView(mBanner, false);
// 可选配置 -------------END
}
@Override
public void onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout) {
// 在这里加载最新数据
if (mIsNetworkEnabled) {
// 如果网络可用,则加载网络数据
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(MainActivity.LOADING_DURATION);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
// 加载完毕后在UI线程结束下拉刷新
mRefreshLayout.endRefreshing();
mDatas.addAll(0, DataEngine.loadNewData());
mAdapter.setDatas(mDatas);
}
}.execute();
} else {
// 网络不可用,结束下拉刷新
Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
mRefreshLayout.endRefreshing();
}
}
@Override
public boolean onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout) {
// 在这里加载更多数据,或者更具产品需求实现上拉刷新也可以
if (mIsNetworkEnabled) {
// 如果网络可用,则异步加载网络数据,并返回true,显示正在加载更多
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(MainActivity.LOADING_DURATION);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
// 加载完毕后在UI线程结束加载更多
mRefreshLayout.endLoadingMore();
mAdapter.addDatas(DataEngine.loadMoreData());
}
}.execute();
return true;
} else {
// 网络不可用,返回false,不显示正在加载更多
Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
return false;
}
}
// 通过代码方式控制进入正在刷新状态。应用场景:某些应用在activity的onStart方法中调用,自动进入正在刷新状态获取最新数据
public void beginRefreshing() {
mRefreshLayout.beginRefreshing();
}
// 通过代码方式控制进入加载更多状态
public void beginLoadingMore() {
mRefreshLayout.beginLoadingMore();
}
}