編輯:關於Android編程
本文實例為大家介紹了Android ListView下拉刷新功能的實現方法和功能,供大家參考,具體內容如下
1、ListView優化方式
界面緩存:ViewHolder+convertView
分頁加載:上拉刷新
圖片緩存
快速滑動ListView禁止刷新
2、效果

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、下拉加刷新原理及實現
下拉刷新核心原理和上拉加載核心原理一致,只是有細節不同。我們需要處理以下問題:如何判斷用戶當前位置在數據第一條?如何判斷用戶在第一條的同時下拉一定距離?如何刷新更新界面(上面已經解決)?
1)、注意事項:
初始化應該設置默認上面的刷新圖標隱藏,在ProgressBar中設置Android:visibility="gone";這樣設置還不行,還需要設置 mListView.setSelection(1);讓當前第一列是第一條數據。同樣的,在加載完成之後也要設置mListView.setSelection(1);,顯示第一行。
2)、實現
*判斷第一條的方式mListView.getFirstVisiblePosition()==0
*mListView實現 mListView.setOnTouchListener方法,來根據用戶手指按下的位置以及抬起的位置,計算這兩者的距離與我們規定的距離(如100)的大小,如大於就進行刷新操作。
*刷新之後通知界面mStringArrayAdapter.notifyDataSetChanged();
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);
//notif
mHandler.sendEmptyMessageDelayed(FRESH,5000);
}
}
break;
}
//不能返回true,不然直接消費掉了
return false;
}
});
以上就是本文的全部內容,希望對大家學習Android軟件編程有所幫助。
Android實現ListView左右滑動刪除和編輯
有時候,為了實現項目中的需求,完成設計好的用戶交互體驗,不的不把這些View重新改造成自己想要的效果。Android原生的ListView是不支持左右滑動的,但是看到微信
Android種使用Notification實現通知管理以及自定義通知欄實例(示例四)
示例一:實現通知欄管理當針對相同類型的事件多次發出通知,作為開發者,應該避免使用全新的通知,這時就應該考慮更新之前通知欄的一些值來達到提醒用戶的目的。例如我們手機的短信系
微信支付開發(7) 刷卡支付
本文介紹微信支付下的刷卡支付的開發過程。微信刷卡支付是指用戶打開微信錢包的刷卡的界面,商戶掃碼後提交完成支付的支付過程。 一、刷卡支付API接口地址https:
Android應用開發入門篇-拼圖游戲
前一段時間為了學習android應用開發,嘗試寫了個簡單的拼圖應用,在此記錄下實現流程的核心部分,同時也希望給其他開發者入門參考帶來幫助。 1. 基本的界面設計