您的位置:首页 > 其它

如何实现上拉加载,默认加载10条数据,上拉再加载10条数据。

2015-09-24 16:27 323 查看
首先如果要用PullToRefreshListView的话,需要先导入一个第三方的Library的库,这个PullToRefreshListView用法跟Listview差不多,有一点不同的是PullToRefreshListView的onPostExecute方法中,position是从1开始的,而listview是从0开始,这点大家注意。

OK,导入Library之后,直接引用com.handmark.pulltorefresh.library.PullToRefreshListView,就可以,里面的一些参数 我不就在这里一一讲解了。接下来我重点讲一下如何默认加载十条,和下拉加载另外十条。

private void initData() {
// 设置可以上下拉
mPullToRefresh.setMode(Mode.BOTH);
ILoadingLayout startLabels = mPullToRefresh.getLoadingLayoutProxy(true,
false);
startLabels.setPullLabel("使劲...");// 刚下拉时,显示的提示
startLabels.setRefreshingLabel("正在使劲加载...");// 刷新时
startLabels.setReleaseLabel("放开加载...");// 下来达到一定距离时,显示的提示

ILoadingLayout endLabels = mPullToRefresh.getLoadingLayoutProxy(false,
true);
endLabels.setPullLabel("使劲...");// 刚下拉时,显示的提示
endLabels.setRefreshingLabel("正在使劲载入...");// 刷新时
endLabels.setReleaseLabel("放开刷新...");// 下来达到一定距离时,显示的提示
mPullToRefresh.setOnRefreshListener(new OnRefreshListener2<ListView>() {

@Override
public void onPullDownToRefresh(
PullToRefreshBase<ListView> refreshView) {
mSlideBool = true;
new FinishRefresh().execute();

}

@Override
public void onPullUpToRefresh(
PullToRefreshBase<ListView> refreshView) {
mSlideBool = false;
new FinishRefresh().execute();
}
});
}
这个方法主要设置上拉下拉显示提示的文字,判断是上拉还是下拉,我这里是用一个变量mSlideBool,onPullDownToRefresh 方法是下拉事件,如果进入 则mSlideBool为true,在AsyncTask中判断mSlideBool的值执行相应的上拉下拉代码。

private class FinishRefresh extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
if (mNumber == 1) {
if (mSlideBool) {
// 执行警报界面的下滑操作
Log.i("111111", "执行警报界面的下滑操作");
} else {
// 执行警报界面的上滑操作
Log.i("111111", "执行警报界面的上滑操作");
File file = new File(mAlertMusicPath);
Log.i("--------------", file.list().length - csList.size()+ "");
if (mEndIndex + 10 > file.list().length - 1) {
csList.addAll(DecryptionMusic(file, mAlertMusicPath,mEndIndex, file.list().length));
mEndIndex = file.list().length;
} else {
csList.addAll(DecryptionMusic(file, mAlertMusicPath,mEndIndex, mEndIndex + 10));
mEndIndex = mEndIndex + 10;
}
}
} else {
if (mSlideBool) {
// 执行门铃界面的下滑操作
Log.i("111111", "执行门铃界面的下滑操作");
} else {
// 执行门铃界面的上滑操作
Log.i("111111", "执行门铃界面的上滑操作");
File file = new File(mBellMusicPathString);
Log.i("--------------", file.list().length - csList.size()+ "");
if (mEndIndex + 10 > file.list().length - 1) {
csList.addAll(DecryptionMusic(file, mBellMusicPathString,mEndIndex, file.list().length));
mEndIndex = file.list().length;
} else {
csList.addAll(DecryptionMusic(file, mBellMusicPathString,mEndIndex, mEndIndex + 10));
mEndIndex = mEndIndex + 10;
}
}
}
return null;
}
这里因为我是解密加载sd卡中的文件,所以数据来源是sd卡中的加密文件。

public List<String> DecryptionMusic(File file, String fileAbsolutePath,int start, int end) {
String[] filelist = file.list();
ArrayList<String> listFile = new ArrayList<String>();
if(file.list().length<10){
end=file.list().length;
}
for (int i = start; i < end; i++) {
File readfile = new File(fileAbsolutePath + "/" + filelist[i]);
Log.i("FileName", readfile.getAbsolutePath());
try {
File file2 = EncryptUtils.decryptVoice(readfile,
mDestinationPath);
if (file2.getName().toLowerCase().endsWith(".mp3")) {
Log.i("FileName", file2.getName());
listFile.add(file2.getName());
}
} catch (Exception e) {
continue;
}
}
return listFile;
}
这个方法是我解密加载文件的方法。 如何默认加载前10条,就是通过改变这个for循环的end值,上拉的时候mEndIndex就相当于start,for循环开始的位置,结束的位置,就是mEndIndex+10就是加载10条,这样就可以实现上拉加载了。

哦对了,再补充一下,上拉下拉的提示文字 默认是白色的,如果背景也是白色的话,会看不到,但是也没有设置字体颜色的接口,必须得自定义xml属性,更改设置颜色的底层方法。

基本情况就是这样了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: