
3、上拉加载更多原理及实现
当我们手指滑动到listview最后位置的时候,我们触发加载数据的方法。这触发之前我们需要做一些工作,包括:
如何判断滑动到最后?
如何避免重复加载数据?
加载之后如何刷新界面?
1)、界面实现AbsListView.OnScrollListener接口,当firstVisibleItem + visibleItemCount >= totalItemCount即可判断滑动到了最下面;
2)、为了不重复加载数据,例如当我手指滑动到最下面,手指立马离开,然后再马上滑动,就会导致数据拉取两次,我们利用mHandler.hasMessages(LOAD)判断消息队列中是否已经存在这个消息;
3)、我们在handler中加载新数据,并且利用 mStringArrayAdapter.notifyDataSetChanged();通知界面刷新。
int result1; int result2; //监听状态改变 @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case SCROLL_STATE_IDLE: //滑动结束 break; case SCROLL_STATE_FLING: //手指离开屏幕 if (result1 >= result2) {//只发送一次,防止多次加载数据if (!mHandler.hasMessages(LOAD))mHandler.sendEmptyMessageDelayed(LOAD, 5000); } break; case SCROLL_STATE_TOUCH_SCROLL: //滑动中 break; } } //滑动结束之后执行 @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // Log.e(TAG, "firstVisibleItem:" + firstVisibleItem + "---visibleItemCount:" + visibleItemCount + "--totalItemCount:" + totalItemCount); //加载到最后 if (firstVisibleItem + visibleItemCount >= totalItemCount) { //这里不处理,在上面状态改变结束之后再处理 } }4、下拉加刷新原理及实现 mListView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startY=event.getY();break;case MotionEvent.ACTION_MOVE:break;case MotionEvent.ACTION_UP:endY=event.getY();if(endY-startY> DISTANT&&(mListView.getFirstVisiblePosition()==1||mListView.getFirstVisiblePosition()==0)){if(!mHandler.hasMessages(FRESH)){mProgressBar_top.setVisibility(View.VISIBLE);//notifmHandler.sendEmptyMessageDelayed(FRESH,5000);}}break; } //不能返回true,不然直接消费掉了 return false; } });以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。