安卓---下拉刷新---上拉加载---解决导入library等自生成库文件失败的问题
本文的下拉刷新以及上拉加载都是用PullToRefresh实现的,关于PullToRefresh的介绍以及源码,网上可以找到很多,本人在此不再赘述。
PullToRefresh是一套实现非常好的下拉刷新库,它支持:
ListView
ExpandableListView
GridView
WebView
ScrollView
HorizontalScrollView
ViewPager
等多种常用的需要刷新的View类型,而且使用起来也十分方便。
(下载地址:https://github.com/chrisbanes/Android-PullToRefresh)
PullToRefresh基本用法:
1、在布局文件中添加PullToRefresh控件,比如PullToRefreshListView;
2、在Activity中,设置监听器OnRefreshListener以响应用户下拉操作;
3、在监听器的onRefresh()方法中执行数据刷新操作,可以通过AsyncTask来实现(一般用于网络数据的操作,如果仅仅是演示,没必要通过AsyncTask实现);
4、在AsyncTask中获取到数据后,记得调用onRefreshComplete()方法通知PullToRefresh控件数据已获取完毕,可以结束刷新操作。
现在正式开始
首先:预览一下效果

效果是不是还不错,心动了么,现在就开始码农的工作把。
1.导入所需的library库文件,下载地址在上面已经给出来了。解压之后的文件目录如下,我们要用的我已经用红色圈圈标出来了

提醒:这个解压文件最好和工程目录放在同一个文件夹下,否则在导入library是会出现识别不了的情况,也就是导入的文件在查看的时候会出现红色叉叉
先把Library当工程导入到eclipse中,然后
工程目录---右键---properties---android---Library---add---选择所需---ok---apply---ok。如下图

前期工作准备完毕。
2.新建XML文件,命名为pulltorefresh
3.新建pulltorefresh类
代码中有几处音频引用,大家自己定义自己的把!

package com.example.android_listview;import java.util.Arrays; import java.util.LinkedList;import android.app.Activity; import android.os.Bundle; import android.text.format.DateUtils; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast;import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener; import com.handmark.pulltorefresh.library.PullToRefreshBase.State; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.handmark.pulltorefresh.library.extras.SoundPullEventListener; //引用pulltorefresh库文件,即library文件public class pulltorefresh extends Activity {//一个可以下拉刷新的listView对象private PullToRefreshListView mPullRefreshListView;//普通的listview对象private ListView actualListView;//添加一个链表数组,来存放string数组,这样就可以动态增加string数组中的内容了private LinkedListView CodemListItems;//给listview添加一个普通的适配器private ArrayAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.pulltorefresh);initView();//一打开应用就自动刷新,下面语句可以写到刷新按钮里面mPullRefreshListView.setRefreshing(true);//new GetDataTask(mPullRefreshListView, mAdapter, mListItems).execute();//mPullRefreshListView.setRefreshing(false); }private void initView() {initPTRListView();initListView();}/*** 设置下拉刷新的listview的动作*/private void initPTRListView() {mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);//设置拉动监听器mPullRefreshListView.setOnRefreshListener(new OnRefreshListener () {@Overridepublic void onRefresh(PullToRefreshBase refreshView) {//设置下拉时显示的日期和时间String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);// 更新显示的label refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);// 开始执行异步任务,传入适配器来进行数据改变new GetDataTask(mPullRefreshListView, mAdapter,mListItems).execute();}});// 添加滑动到底部的监听器mPullRefreshListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {@Overridepublic void onLastItemVisible() {Toast.makeText(getApplication(), "已经到底了", Toast.LENGTH_SHORT).show();}});//mPullRefreshListView.isScrollingWhileRefreshingEnabled();//看刷新时是否允许滑动//在刷新时允许继续滑动mPullRefreshListView.setScrollingWhileRefreshingEnabled(true);//mPullRefreshListView.getMode();//得到模式//上下都可以刷新的模式。这里有两个选择:Mode.PULL_FROM_START,Mode.BOTH,PULL_FROM_END mPullRefreshListView.setMode(Mode.BOTH);/*** 设置反馈音效*/SoundPullEventListener soundListener = new SoundPullEventListener (this);soundListener.addSoundEvent(State.PULL_TO_REFRESH, R.raw.pull_event);soundListener.addSoundEvent(State.RESET, R.raw.reset_sound);soundListener.addSoundEvent(State.REFRESHING, R.raw.refreshing_sound);mPullRefreshListView.setOnPullEventListener(soundListener);}/*** 设置listview的适配器*/private void initListView() {//通过getRefreshableView()来得到一个listview对象actualListView = mPullRefreshListView.getRefreshableView();String[] data = new String[] { "乖,摸摸头", "我有一碗酒,可以慰风尘", "对不起", "普通朋友","不许哭", "唱歌人不许掉眼泪", "听歌人不许掉眼泪", "一个叫木头,一个叫马尾","椰子姑娘流浪记","风马少年","小因果","我的师弟不是人" };mListItems = new LinkedList ();//把string数组中的string添加到链表中 mListItems.addAll(Arrays.asList(data));mAdapter = new ArrayAdapter (getApplicationContext(), android.R.layout.simple_list_item_1, mListItems);actualListView.setAdapter(mAdapter);} }
4.这里用到了一个异步任务,来模仿从网络加载数据(异步类AsyncTask)
这里要注意的是,加载完后要出发刷新完成和通知适配器改变的方法
新建GetDataTask继承AsyncTask
package com.example.android_listview;import java.util.LinkedList;import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;import android.os.AsyncTask; import android.widget.ArrayAdapter;public class GetDataTask extends AsyncTaskView Code{private PullToRefreshListView mPullRefreshListView;private ArrayAdapter mAdapter;private LinkedList mListItems;public GetDataTask(PullToRefreshListView listView,ArrayAdapter adapter,LinkedList listItems) {// TODO 自动生成的构造函数存根mPullRefreshListView = listView;mAdapter = adapter;mListItems = listItems;}@Overrideprotected Void doInBackground(Void... params) {//模拟请求try {Thread.sleep(2000);} catch (InterruptedException e) {}return null;}@Overrideprotected void onPostExecute(Void result) {// TODO 自动生成的方法存根super.onPostExecute(result);//得到当前的模式Mode mode = mPullRefreshListView.getCurrentMode();if(mode == Mode.PULL_FROM_START) {mListItems.addFirst("这是刷新出来的数据");}else {mListItems.addLast("这是加载出来的数据");}// 通知数据改变了 mAdapter.notifyDataSetChanged();// 加载完成后停止刷新 mPullRefreshListView.onRefreshComplete();} }
整个工程就完成了,主要代码来源:http://www.cnblogs.com/tianzhijiexian/p/4023802.html
当然大家也可以自己写自己特色ListView的下拉刷新,可以参考http://blog.csdn.net/loongggdroid/article/details/9385535
这篇博客讲解很清楚:http://blog.csdn.net/leehong2005/article/details/12567757
2016.5.15找到了一个感觉万能的下拉刷新,在此标记一下:http://www.jb51.net/article/39714.htm,
http://www.2cto.com/kf/201408/329317.html源码下载地址:https://github.com/jingchenUSTC/PullToRefreshAndLoad
转载于:https://www.cnblogs.com/rainday1/p/5419968.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
