android下拉刷新之PullToRefreshListView(一)

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

一、使用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; //显示的adapter
	private TextView mTextTitle;
	private int mCurrentNum = 0;
	
	private Handler mHandle;
	
	@Override
	protected 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+"");
		}
		//新建adapter
		mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems); 
		//绑定adapter
		mListView.setAdapter(mAdapter);
		initListener();
	}
	
	private void initListener(){
		//刷新方法,当设置Mode.BOTH时,使用OnRefreshListener2
		//当不用Mode.BOTH双向拉动刷新时,只需要使用
		mListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {
			@Override
			public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
				mTextTitle.setText("下拉刷新");
				//这里是下拉吗
				downpullrefreshData();
			}
			@Override
			public 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() {

			@Override
			public 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() {
			
			@Override
			public 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() {
			
			@Override
			public 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() {
			
			@Override
			public void run() {
				mAdapter.notifyDataSetChanged();
				mListView.onRefreshComplete();
			}
		});
	}
}
至此,一个最基本的下拉刷新+上拉加载更多就完成了,在写完之后,针对目前的完成状况




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

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

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

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值