国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種Android系統(tǒng)中ListView快速分頁(yè)加載的方法與流程

      文檔序號(hào):12718873閱讀:352來(lái)源:國(guó)知局
      一種Android系統(tǒng)中ListView快速分頁(yè)加載的方法與流程

      本發(fā)明涉及一種Android系統(tǒng)中ListView快速分頁(yè)加載的方法,屬于安卓系統(tǒng)ListView列表優(yōu)化技術(shù)領(lǐng)域。



      背景技術(shù):

      近年來(lái),Android操作系統(tǒng)不斷發(fā)展演進(jìn),搭載Android操作系統(tǒng)的智能設(shè)備逐漸成為普通人每天必不可少的工具。在安卓設(shè)備與用戶(hù)進(jìn)行交互的各種方式中,以列表進(jìn)行信息展示是最常用的一種,因此,ListView成為Android系統(tǒng)中應(yīng)用最靈活廣泛的控件之一。開(kāi)發(fā)者可以通過(guò)ListView向用戶(hù)展示資源,包括展示文字、圖片、數(shù)據(jù)等多種不同類(lèi)型的內(nèi)容,例如常用的聯(lián)系人列表、微博信息、微信消息等都是使用ListView控件來(lái)實(shí)現(xiàn)的。

      通常情況下,ListView需要加載的資源往往都超出了Android設(shè)備屏幕一頁(yè)所容納的數(shù)量,當(dāng)ListView預(yù)期要加載的內(nèi)容包括很多個(gè)子項(xiàng)時(shí),如果待加載的資源存在于數(shù)據(jù)庫(kù)或服務(wù)器中,此時(shí)若直接加載全部信息,龐大的數(shù)據(jù)量會(huì)造成大量的內(nèi)存和網(wǎng)絡(luò)流量消耗,并且在客戶(hù)端造成用戶(hù)長(zhǎng)時(shí)間等待,對(duì)終端用戶(hù)產(chǎn)生不好的使用體驗(yàn)?;诖耍枰獙?duì)ListView的內(nèi)容進(jìn)行分頁(yè)加載,只顯示當(dāng)前頁(yè)面內(nèi)的子項(xiàng)內(nèi)容,當(dāng)用戶(hù)需要讀取更多數(shù)據(jù)時(shí)上拉觸發(fā)加載,再將新加載的數(shù)據(jù)添加到顯示列表中進(jìn)行顯示。目前Android提供的分頁(yè)操作大致是在Activity中通過(guò)滑動(dòng)監(jiān)聽(tīng)器的監(jiān)聽(tīng)狀態(tài)觸發(fā)新的加載,更新固定數(shù)目的Item,數(shù)據(jù)變化后通過(guò)Adapter來(lái)通知ListView刷新數(shù)據(jù),接收數(shù)據(jù)并進(jìn)行顯示。這種方法存在以下缺陷:1、當(dāng)應(yīng)用程序中多處都需要使用ListView列表控件時(shí),需要針對(duì)每個(gè)控件寫(xiě)分頁(yè)邏輯以達(dá)到預(yù)期效果,編程復(fù)雜導(dǎo)致軟件臃腫,占用更大的存儲(chǔ)資源,造成不好的用戶(hù)體驗(yàn)。2、如果服務(wù)器端提供的分頁(yè)策略發(fā)生變化,則在客戶(hù)端軟件需要進(jìn)行大量的修改,不同策略的操作混在一起,代碼復(fù)雜會(huì)導(dǎo)致效率低下,應(yīng)用程序不易維護(hù)。



      技術(shù)實(shí)現(xiàn)要素:

      針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種Android系統(tǒng)中ListView快速分頁(yè)加載的方法。

      本發(fā)明針對(duì)應(yīng)用程序中加載服務(wù)器資源的不同方式,給出了ListView加載資源的相應(yīng)方法,并且將不同方法進(jìn)行比較概括,封裝成為通用的抽象父類(lèi),并在繼承子類(lèi)中獲取不同加載模式所需的不同參數(shù),則在Activity中使用ListView時(shí)可簡(jiǎn)單地通過(guò)實(shí)例化相應(yīng)子類(lèi)對(duì)象來(lái)實(shí)現(xiàn)ListView的快速分頁(yè)加載。本發(fā)明公開(kāi)的方法既通過(guò)分頁(yè)加載實(shí)現(xiàn)了迅速的響應(yīng)和較小的資源開(kāi)銷(xiāo),又通過(guò)封裝實(shí)現(xiàn)了分頁(yè)方法的抽象和快速移植利用,滿(mǎn)足了固定分頁(yè)加載和自任一項(xiàng)加載多種不同的需求,使ListView的使用更清晰明確,同時(shí)易擴(kuò)展、易維護(hù),提高了系統(tǒng)效率。

      術(shù)語(yǔ)解釋?zhuān)?/p>

      1、ListView,指Android系統(tǒng)中的列表控件。

      2、繼承,指Java中子類(lèi)繼承父類(lèi),可以獲得父類(lèi)的屬性和方法。

      3、回調(diào)函數(shù),指被調(diào)用類(lèi)反過(guò)來(lái)使用了調(diào)用類(lèi)中的方法,該方法即為回調(diào)函數(shù)。

      4、divideBase類(lèi),是指本發(fā)明中實(shí)現(xiàn)分頁(yè)邏輯的抽象父類(lèi)。

      5、固定分頁(yè)加載,是指服務(wù)器端資源按頁(yè)進(jìn)行存儲(chǔ)和加載的方式。

      6、從任一項(xiàng)起始加載,是指服務(wù)器端的每條數(shù)據(jù)分別進(jìn)行存儲(chǔ)和加載的方式。

      本發(fā)明的技術(shù)方案為:

      一種Android系統(tǒng)中ListView快速分頁(yè)加載的方法,包括步驟如下:

      (1)初始化起始狀態(tài);

      (2)獲取加載數(shù)據(jù)所需的參數(shù),該參數(shù)用以確定所加載數(shù)據(jù)的位置,根據(jù)分頁(yè)加載模式的不同,封裝成不同的獨(dú)立的抽象方法,即參數(shù)獲取方法,供不同的子類(lèi)實(shí)現(xiàn);

      (3)封裝加載數(shù)據(jù)抽象方法,在本方法中需要調(diào)用步驟(2)中的參數(shù)獲取方法,將加載數(shù)據(jù)所需的參數(shù)傳遞到本步驟的方法中;

      (4)實(shí)現(xiàn)具體的數(shù)據(jù)加載方法,即對(duì)步驟(3)中封裝的加載數(shù)據(jù)抽象方法進(jìn)行具體使用:先判斷加載標(biāo)志位狀態(tài),如果加載標(biāo)志位狀態(tài)為false狀態(tài)時(shí),則判定當(dāng)前沒(méi)有加載任務(wù),調(diào)用步驟(3)中的加載數(shù)據(jù)抽象方法,同時(shí)將加載標(biāo)志位置為true狀態(tài);否則,當(dāng)加載標(biāo)志位狀態(tài)為true狀態(tài)時(shí),則判定當(dāng)前有加載任務(wù),不執(zhí)行加載方法,也不返回任何數(shù)據(jù);加載標(biāo)志位是一個(gè)boolean類(lèi)型的量,包括true狀態(tài)和false狀態(tài)兩種狀態(tài),false狀態(tài)表示當(dāng)前沒(méi)有加載線程執(zhí)行,true狀態(tài)表示當(dāng)前已有加載線程正在運(yùn)行;

      (5)當(dāng)加載結(jié)束時(shí),判斷是否成功加載新數(shù)據(jù),如果成功,ListView的適配器會(huì)收到新數(shù)據(jù),更新當(dāng)前顯示界面頁(yè)標(biāo)號(hào)參數(shù),就是賦新值,更新為返回來(lái)的當(dāng)前參數(shù)值,并返回本次加載所讀取的新數(shù)據(jù),并在客戶(hù)端進(jìn)行顯示,同時(shí)將加載標(biāo)志位置為false;如果加載失敗,返回原來(lái)的頁(yè)標(biāo)號(hào)狀態(tài),即返回原狀態(tài)。不影響下一次的加載請(qǐng)求。

      根據(jù)本發(fā)明優(yōu)選的,上述步驟(3)至步驟(5)由抽象父類(lèi)即divideBase類(lèi)來(lái)實(shí)現(xiàn)。由此完成了客戶(hù)端請(qǐng)求服務(wù)器端加載資源的通用邏輯封裝。

      根據(jù)本發(fā)明優(yōu)選的,所述步驟(2),當(dāng)分頁(yè)加載模式為按固定分頁(yè)加載時(shí),參數(shù)獲取方法由子類(lèi)divideA實(shí)現(xiàn),設(shè)定需要獲取的兩個(gè)參數(shù)分別記為param1、param2,包括步驟如下:

      A、在服務(wù)器端提供的資源池中,為全部資源進(jìn)行分頁(yè)標(biāo)號(hào);

      B、客戶(hù)端向服務(wù)器提出加載數(shù)據(jù)的請(qǐng)求時(shí),同時(shí)向服務(wù)器發(fā)送當(dāng)前客戶(hù)端內(nèi)容的頁(yè)標(biāo)號(hào)index,服務(wù)器根據(jù)收到的頁(yè)標(biāo)號(hào)index,將頁(yè)標(biāo)號(hào)index加1,即得到所需參數(shù)param1為index+1;每頁(yè)所包含的數(shù)據(jù)子項(xiàng)數(shù)目size即為param2,服務(wù)器端根據(jù)參數(shù)按約定協(xié)議返回下一頁(yè)的數(shù)據(jù),如JSON格式,客戶(hù)端通過(guò)回調(diào)函數(shù)獲取下一頁(yè)的數(shù)據(jù)后解析并顯示在界面中。

      根據(jù)本發(fā)明優(yōu)選的,所述步驟(2),當(dāng)分頁(yè)加載模式為從任一項(xiàng)起始加載時(shí),參數(shù)獲取方法由子類(lèi)divideB實(shí)現(xiàn),設(shè)定需要獲取的兩個(gè)參數(shù)分別記為param3、param4,包括步驟如下:

      C、在服務(wù)器端提供的資源池中,服務(wù)器端為顯示在ListView中的每一項(xiàng)內(nèi)容分別進(jìn)行標(biāo)號(hào);

      D、客戶(hù)端向服務(wù)器提出加載數(shù)據(jù)的請(qǐng)求時(shí),同時(shí)向服務(wù)器發(fā)送當(dāng)前客戶(hù)端界面中的首項(xiàng)位置position,即得到所需參數(shù)param3為position+size1,得到所需參數(shù)param4為param3+size1-1,size1為每頁(yè)所包含的數(shù)據(jù)子項(xiàng)數(shù)目,服務(wù)器端根據(jù)參數(shù)按約定協(xié)議返回下一頁(yè)的數(shù)據(jù),如JSON格式,客戶(hù)端通過(guò)回調(diào)函數(shù)獲取下一頁(yè)的數(shù)據(jù)后解析并顯示在界面中。

      上述參數(shù)param1、param2、param3、param4的計(jì)算方法由子類(lèi)復(fù)寫(xiě)實(shí)現(xiàn),父類(lèi)中只提供抽象方法以供繼承。

      當(dāng)應(yīng)用程序的Activity中要使用ListView控件并進(jìn)行分頁(yè)加載時(shí),只需要根據(jù)加載模式的不同實(shí)例化相應(yīng)繼承子類(lèi)的對(duì)象,復(fù)寫(xiě)其加載方法并添加回調(diào)函數(shù),完成加載過(guò)程,即可實(shí)現(xiàn)快速分頁(yè)加載的操作。如果要使用其他加載模式,只需要實(shí)例化其他子類(lèi)的對(duì)象即可,不必再重寫(xiě)相同的分頁(yè)邏輯代碼。

      本發(fā)明的有益效果為:

      1、本發(fā)明將ListView分頁(yè)加載的過(guò)程拆分為實(shí)現(xiàn)基本通用分頁(yè)邏輯的抽象父類(lèi)、針對(duì)不同加載模式獲取加載參數(shù)的繼承子類(lèi)、對(duì)ListView分頁(yè)加載具體使用的Activity類(lèi)三大部分,通過(guò)這種方法實(shí)現(xiàn)了ListView對(duì)資源的分頁(yè)加載,降低用戶(hù)等待時(shí)間的同時(shí)節(jié)省了資源消耗。

      2、本發(fā)明通過(guò)封裝實(shí)現(xiàn)了ListView分頁(yè)加載功能的快速移植,當(dāng)應(yīng)用程序中需要使用該功能時(shí),僅需實(shí)例化對(duì)象和簡(jiǎn)單的操作即可,無(wú)需多處重復(fù)添加分頁(yè)邏輯,大大簡(jiǎn)化了代碼復(fù)雜程度,提升了開(kāi)發(fā)速度,使ListView的使用更清晰明確,同時(shí)易擴(kuò)展、易維護(hù),提升了系統(tǒng)性能。

      附圖說(shuō)明

      圖1為Android系統(tǒng)中ListView快速分頁(yè)加載的方法的流程框圖;

      圖2為按固定分頁(yè)加載對(duì)應(yīng)的繼承子類(lèi)divideA類(lèi)框架圖;

      圖3為從任一項(xiàng)起始加載對(duì)應(yīng)的繼承子類(lèi)divideB類(lèi)框架圖;

      圖4為使用ListView快速分頁(yè)功能的Activity框架圖。

      具體實(shí)施方式

      下面結(jié)合說(shuō)明書(shū)附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步限定,但不限于此。

      實(shí)施例

      一種Android系統(tǒng)中ListView快速分頁(yè)加載的方法,如圖1所示,包括步驟如下:

      (1)初始化起始狀態(tài);

      (2)獲取加載數(shù)據(jù)所需的參數(shù),該參數(shù)用以確定所加載數(shù)據(jù)的位置,根據(jù)分頁(yè)加載模式的不同,封裝成不同的獨(dú)立的抽象方法,即參數(shù)獲取方法,供不同的子類(lèi)實(shí)現(xiàn);

      當(dāng)分頁(yè)加載模式為按固定分頁(yè)加載時(shí),參數(shù)獲取方法由子類(lèi)divideA實(shí)現(xiàn),設(shè)定需要獲取的兩個(gè)參數(shù)分別記為param1、param2,如圖2所示,包括步驟如下:

      A、在服務(wù)器端提供的資源池中,為全部資源進(jìn)行分頁(yè)標(biāo)號(hào);

      B、客戶(hù)端向服務(wù)器提出加載數(shù)據(jù)的請(qǐng)求時(shí),同時(shí)向服務(wù)器發(fā)送當(dāng)前客戶(hù)端內(nèi)容的頁(yè)標(biāo)號(hào)index,服務(wù)器根據(jù)收到的頁(yè)標(biāo)號(hào)index,將頁(yè)標(biāo)號(hào)index加1,即得到所需參數(shù)param1為index+1;每頁(yè)所包含的數(shù)據(jù)子項(xiàng)數(shù)目size即為param2,服務(wù)器端根據(jù)參數(shù)按約定協(xié)議返回下一頁(yè)的數(shù)據(jù),如JSON格式,客戶(hù)端通過(guò)回調(diào)函數(shù)獲取下一頁(yè)的數(shù)據(jù)后解析并顯示在界面中。

      當(dāng)分頁(yè)加載模式為從任一項(xiàng)起始加載時(shí),參數(shù)獲取方法由子類(lèi)divideB實(shí)現(xiàn),設(shè)定需要獲取的兩個(gè)參數(shù)分別記為param3、param4,如圖3所示,包括步驟如下:

      C、在服務(wù)器端提供的資源池中,服務(wù)器端為顯示在ListView中的每一項(xiàng)內(nèi)容分別進(jìn)行標(biāo)號(hào);

      D、客戶(hù)端向服務(wù)器提出加載數(shù)據(jù)的請(qǐng)求時(shí),同時(shí)向服務(wù)器發(fā)送當(dāng)前客戶(hù)端界面中的首項(xiàng)位置position,即得到所需參數(shù)param3為position+size1,得到所需參數(shù)param4為param3+size1-1,size1為每頁(yè)所包含的數(shù)據(jù)子項(xiàng)數(shù)目,服務(wù)器端根據(jù)參數(shù)按約定協(xié)議返回下一頁(yè)的數(shù)據(jù),如JSON格式,客戶(hù)端通過(guò)回調(diào)函數(shù)獲取下一頁(yè)的數(shù)據(jù)后解析并顯示在界面中。

      (3)封裝加載數(shù)據(jù)抽象方法,在本方法中需要調(diào)用步驟(2)中的參數(shù)獲取方法,將加載數(shù)據(jù)所需的參數(shù)傳遞到本步驟的方法中;

      (4)實(shí)現(xiàn)具體的數(shù)據(jù)加載方法,即對(duì)步驟(3)中封裝的加載數(shù)據(jù)抽象方法進(jìn)行具體使用:先判斷加載標(biāo)志位狀態(tài),如果加載標(biāo)志位狀態(tài)為false狀態(tài)時(shí),則判定當(dāng)前沒(méi)有加載任務(wù),調(diào)用步驟(3)中的加載數(shù)據(jù)抽象方法,同時(shí)將加載標(biāo)志位置為true狀態(tài);否則,當(dāng)加載標(biāo)志位狀態(tài)為true狀態(tài)時(shí),則判定當(dāng)前有加載任務(wù),不執(zhí)行加載方法,也不返回任何數(shù)據(jù);加載標(biāo)志位是一個(gè)boolean類(lèi)型的量,包括true狀態(tài)和false狀態(tài)兩種狀態(tài),false狀態(tài)表示當(dāng)前沒(méi)有加載線程執(zhí)行,true狀態(tài)表示當(dāng)前已有加載線程正在運(yùn)行;

      (5)當(dāng)加載結(jié)束時(shí),判斷是否成功加載新數(shù)據(jù),如果成功,ListView的適配器會(huì)收到新數(shù)據(jù),更新當(dāng)前顯示界面頁(yè)標(biāo)號(hào)參數(shù),就是賦新值,更新為返回來(lái)的當(dāng)前參數(shù)值,并返回本次加載所讀取的新數(shù)據(jù),并在客戶(hù)端進(jìn)行顯示,同時(shí)將加載標(biāo)志位置為false;如果加載失敗,返回原來(lái)的頁(yè)標(biāo)號(hào)狀態(tài),即返回原狀態(tài)。不影響下一次的加載請(qǐng)求。

      上述步驟(3)至步驟(5)由抽象父類(lèi)即divideBase類(lèi)來(lái)實(shí)現(xiàn)。由此完成了客戶(hù)端請(qǐng)求服務(wù)器端加載資源的通用邏輯封裝。

      上述參數(shù)param1、param2、param3、param4的計(jì)算方法由子類(lèi)復(fù)寫(xiě)實(shí)現(xiàn),父類(lèi)中只提供抽象方法以供繼承。

      當(dāng)應(yīng)用程序的Activity中要使用ListView控件并進(jìn)行分頁(yè)加載時(shí),只需要根據(jù)加載模式的不同實(shí)例化相應(yīng)繼承子類(lèi)的對(duì)象,復(fù)寫(xiě)其加載方法并添加回調(diào)函數(shù),完成加載過(guò)程,即可實(shí)現(xiàn)快速分頁(yè)加載的操作。如果要使用其他加載模式,只需要實(shí)例化其他子類(lèi)的對(duì)象即可,不必再重寫(xiě)相同的分頁(yè)邏輯代碼。如圖4所示。

      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1