android 之ListView分页效果以及从网络上加载数据一系列的综合运用
生活随笔
收集整理的這篇文章主要介紹了
android 之ListView分页效果以及从网络上加载数据一系列的综合运用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
數(shù)據(jù)分頁策略:
<1>:用多少查多少
<2>:全部查詢出來,再進行分頁處理
數(shù)據(jù)分頁的有關算法:
(1):起始索引值 = (當前頁-1)*每頁顯示的記錄數(shù)
(2):結束索引值 = 當前頁*每頁顯示的記錄數(shù) ; 如果結束索引值大于記錄總數(shù)則結束索引值應該為記錄總數(shù)。
實現(xiàn)效果圖:
后臺業(yè)務邏輯:
package com.hsj.example.listviewpaginationdemo01;import android.os.Bundle; import android.os.SystemClock; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AbsListView; import android.widget.ArrayAdapter; import android.widget.ListView;import java.util.ArrayList; import java.util.List;public class MainActivity extends AppCompatActivity {private ListView listView_names;private ArrayAdapter<String> adapter;/*** 當前頁號*/private int pageNo=1;/*** 每頁顯示的記錄數(shù)*/private int pageSize=20;/*** 總數(shù)據(jù)源*/private List<String> data=new ArrayList<>();/*** 最后一個可見的條目*/private int lastVisibleItem;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.listView_names= (ListView) this.findViewById(R.id.listView_names);View footerView=View.inflate(this,R.layout.footer_view,null);this.listView_names.addFooterView(footerView);this.adapter=this.getAdapter();this.listView_names.setAdapter(adapter);//注冊滾動監(jiān)聽器this.listView_names.setOnScrollListener(new AbsListView.OnScrollListener() {/*** 當滾動狀態(tài)發(fā)生變化時自動調(diào)用的方法** @param view 事件源(ListView)* @param scrollState* SCROLL_STATE_IDLE=0:當前 ListView處于空閑狀態(tài)時的值* 空閑狀態(tài)有兩種情況:* A:一直處于空閑狀態(tài)* B:由滾動狀態(tài)回歸到空閑狀態(tài)** SCROLL_STATE_TOUCH_SCROLL=1:觸摸滾動狀態(tài)(用戶的手指在屏幕上移動并且手指沒有離開屏幕時的狀態(tài))* SCROLL_STATE_FLING=2:用戶觸屏滾動后執(zhí)行了一個快速滑動動作時對應的狀態(tài)*/@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {/*isBottom=true:滾動到頁面底部了scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE:當前 ListView 回歸到空閑狀態(tài)了*/if(lastVisibleItem==adapter.getCount() && scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE){pageNo++;loadNextPageData();}System.out.println("==onScrollStateChanged(AbsListView view="+view+", int scrollState="+scrollState+")===");}/*** 當滾動條目時自動調(diào)用的方法,當然初始顯示時也會調(diào)用* @param view 事件源(ListView)* @param firstVisibleItem 第一個可見條目的索引值* @param visibleItemCount 當前手機屏幕上顯示的記錄條數(shù)* @param totalItemCount 數(shù)據(jù)源中記錄的總數(shù)*/@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {//-1:是為了減去頁腳的索引值lastVisibleItem=firstVisibleItem+visibleItemCount-1;System.out.println("===onScroll(AbsListView view="+view+", int firstVisibleItem="+firstVisibleItem+", int visibleItemCount="+visibleItemCount+", int totalItemCount="+totalItemCount+")====");}});}/*** 完成加載下一頁的操作*/private void loadNextPageData() {new Thread(new Runnable() {@Overridepublic void run() {//做耗時操作SystemClock.sleep(3000);List<String> subList=getData();//改變數(shù)據(jù)源data.addAll(subList);runOnUiThread(new Runnable() {@Overridepublic void run() {//此處更新 UIadapter.notifyDataSetChanged();}});}}).start();System.out.println("==加載下一頁===");}private ArrayAdapter<String> getAdapter() {this.data.addAll(this.getData());adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);return adapter;}private List<String> getData() {List<String> subList=new ArrayList<>();for(int i=(pageNo-1)*pageSize;i<pageNo*pageSize;i++){subList.add("小麗"+i);}return subList;} }前臺代碼省略。。。
從網(wǎng)絡上加載數(shù)據(jù)(分頁效果):
總結
以上是生活随笔為你收集整理的android 之ListView分页效果以及从网络上加载数据一系列的综合运用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 丰县饭店位置在哪
- 下一篇: android 之ListView