android下拉刷新之PullToRefreshListView(一)

来源:互联网 发布:php 信鸽推送 编辑:程序博客网 时间:2024/04/29 21:56

下拉刷新的实现方式有很多,本篇主要是使用线程的下拉刷新工具来实现下拉刷新

一、使用PullToRefreshListView实现需要先下载所需要的工程(https://github.com/chrisbanes/Android-PullToRefresh

下载好之后需要导入项目中的Library工程,添加工程到Eclipse中,然后如图配置


​然后,在项目的布局中,这样使用

<com.handmark.pulltorefresh.library.PullToRefreshListView  
  android:id="@+id/pull_refresh_list"    ​android:layout_width="fill_parent"    android:layout_height="fill_parent"/>


在布局文件完成之后,就可以编写界面代码了

public class MainActivity extends Activity {private PullToRefreshListView mListView;private ArrayList<String> mListItems; //显示的数据private ArrayAdapter<String> mAdapter; //显示的adapterprivate TextView mTextTitle;private int mCurrentNum = 0;private Handler mHandle;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mHandle =new Handler(this.getMainLooper());mListView = (PullToRefreshListView)findViewById(R.id.activity_main_pull_refresh_list);mTextTitle = (TextView)findViewById(R.id.activity_main_text_title);mListItems = new ArrayList<String>();for(int i = mCurrentNum;i < mCurrentNum+10;i++){mListItems.add(i+"");}//新建adaptermAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems); //绑定adaptermListView.setAdapter(mAdapter);initListener();}private void initListener(){//刷新方法,当设置Mode.BOTH时,使用OnRefreshListener2//当不用Mode.BOTH双向拉动刷新时,只需要使用mListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {@Overridepublic void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {mTextTitle.setText("下拉刷新");//这里是下拉吗downpullrefreshData();}@Overridepublic void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {mTextTitle.setText("上拉刷新");Log.i("ceshi", "上啦刷新");//这里是上啦吗uppullrefreshData();}});//mListView.setMode(Mode.PULL_FROM_START);//mListView.setOnRefreshListener(new OnRefreshListener<ListView>() {////@Override//public void onRefresh(PullToRefreshBase<ListView> refreshView) {////}//});//当下拉到显示最后一项时mListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {@Overridepublic void onLastItemVisible() {Log.i("ceshi", "最后一部分可以看到了");uppullrefreshData();}});//setOnLastItemVisibleListener(OnLastItemVisibleListener listener):设置是否到底部监听器;/** * Mode.BOTH:同时支持上拉下拉 *Mode.PULL_FROM_START:只支持下拉Pulling Down *Mode.PULL_FROM_END:只支持上拉Pulling Up */mListView.setMode(Mode.BOTH);}/** * 下拉刷新数据,这里是刷新,会清空之前的数据 */private void downpullrefreshData(){new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}mListItems.clear();for(int i = 0;i < 10;i++){mListItems.add(i+""+",下拉刷新");}refreshPullRefreshAdapter();}}).start();}/** * 上拉刷新数据,这里是添加 */private void uppullrefreshData(){new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}for(int i = mCurrentNum;i < mCurrentNum+10;i++){mListItems.add(i+""+",上拉刷新");}mCurrentNum +=10;refreshPullRefreshAdapter();}}).start();}/** * 刷新显示 */private void refreshPullRefreshAdapter(){mHandle.post(new Runnable() {@Overridepublic void run() {mAdapter.notifyDataSetChanged();mListView.onRefreshComplete();}});}}
至此,一个最基本的下拉刷新+上拉加载更多就完成了,在写完之后,针对目前的完成状况




可以预见,目前的缺陷是:

1、还没有完成下拉刷新和上拉刷新时的动画及文字的自定义

2、虽然有了上拉到显示最后一项时,立刻加载下一页的功能,但是如果再进行需求的灵活变通时,就

存在一定的局限性,例如在显示到倒数第五个时就加载下一页,这样在网速没有问题时可以让用户毫无阻力地显示下一页,但是这种实现就目前看来可能比较困难,这需要对PullToRefreshListView的进一步了解才能知道能否实现




0 0
原创粉丝点击