摘 要:本文根據(jù)對(duì)Android問卷調(diào)查客戶端問卷題目的分析的結(jié)果,設(shè)計(jì)出題目加載視圖的布局,并對(duì)題目分頁(yè)加載的實(shí)現(xiàn)提出了詳細(xì)方案。
關(guān)鍵詞:Android;問卷調(diào)查客戶端;分頁(yè)加載
中圖分類號(hào):TP311.52
1 基于Android的問卷調(diào)查客戶端簡(jiǎn)介
基于Android的問卷調(diào)查系統(tǒng)由兩個(gè)子系統(tǒng)構(gòu)成,分別為基于Windows的問卷設(shè)計(jì)子系統(tǒng)和基于Android的調(diào)查客戶端子系統(tǒng)。兩端的問卷數(shù)據(jù)接口使用XML標(biāo)準(zhǔn)數(shù)據(jù)文件?;贏ndroid的問卷調(diào)查客戶端核心模塊為問卷問題的分頁(yè)加載。
2 問卷視圖的布局分析
問題的加載用到多個(gè)視圖布局的嵌套。questionActivity下的問題列表視圖需要一個(gè)布局,問題列表視圖下選擇題的備選答案列表又需要一個(gè)布局,備選答案列表中答案項(xiàng)根據(jù)單選或多選又需要不同的答案項(xiàng)布局。列表嵌套布局如圖1所示。
3 問題分頁(yè)加載顯示實(shí)現(xiàn)主流程
問卷問題分頁(yè)加載顯示程序?qū)崿F(xiàn)主流程如下所述:
(1)在questionActivity問卷界面類下將XML問卷數(shù)據(jù)解析到paper問卷對(duì)象中。
(2)questionActivity獲得paper對(duì)象后調(diào)用GetPaperCount方法,根據(jù)問卷各問題的分頁(yè)索引獲取到問題分頁(yè)總頁(yè)數(shù)。
(3)當(dāng)要加載顯示某頁(yè)對(duì)應(yīng)的問題列表時(shí),通過調(diào)用titleAdaper適配器對(duì)象的方法getPageQuestionList,傳入當(dāng)前頁(yè)碼獲取到當(dāng)前頁(yè)的問題對(duì)象列表questionPageList。
(4)在questionActivity對(duì)應(yīng)的問題列表視圖適配器類titleAdapter繼承自BaseAdapter適配器基類。在titleAdapter下重寫getCount、getItem、getItemId、GetView系列方法,使getCount返回questionPageList列表的長(zhǎng)度,getItem獲取當(dāng)前position的問題對(duì)象,getItemId返回當(dāng)前position(位置)值。GetView方法在questionActivity對(duì)應(yīng)的列表視圖(ListView)對(duì)象的請(qǐng)求下每次自動(dòng)得到一個(gè)position的問題的視圖。如果問題列表questionPageList長(zhǎng)度為N,則GetView被自動(dòng)請(qǐng)求N次獲得questionPageList列表的所有問題視圖給questionActivity視圖對(duì)象。
4 分頁(yè)計(jì)算
GetPaperCount方法用于根據(jù)問卷對(duì)象paper下的問題列表各問題的分頁(yè)索引index計(jì)算總頁(yè)數(shù)。根據(jù)用戶需求,問題列表各問題在哪一頁(yè),由問卷設(shè)計(jì)員設(shè)計(jì)問卷時(shí)來(lái)設(shè)置。假設(shè)某問題在第N頁(yè),分頁(yè)索引應(yīng)該設(shè)置為(N-1)×100到(N-1)×200-1之內(nèi)。比如某問題在第2頁(yè),其索引值應(yīng)為100到199之間的值。
由此可見,GetPaperCount方法獲取總頁(yè)數(shù)算法實(shí)現(xiàn)流程如下所述:
(1)設(shè)置最大索引變量maxIndex,初始化為0。并循環(huán)遍歷paper問卷對(duì)象下的問題列表,獲取所有問題的最大索引值到maxIndex。
(2)遍歷結(jié)束后,計(jì)算總頁(yè)數(shù)為:count=(int)(maxIndex/100)+1。
5 根據(jù)當(dāng)前頁(yè)碼獲取問題列表
getPageQuestionList方法用于根據(jù)當(dāng)前頁(yè)碼獲取問題列表。本方法根據(jù)傳入的頁(yè)碼計(jì)算出問題的對(duì)應(yīng)的索引范圍,遍歷paper對(duì)象問題列表的所有問題,獲取到問題分頁(yè)索引處于該索引范圍的問題對(duì)象并添加到分頁(yè)問題列表questionPageList中。
questionActivity對(duì)應(yīng)的問題列表視圖數(shù)據(jù)適配器類titleAdapter中的GetView方法的運(yùn)行機(jī)制在前面已經(jīng)做過敘述。GetView方法單次獲取問題對(duì)象視圖實(shí)現(xiàn)流程如下所述:
(1)GetView方法得到questionActivity問題列表視圖quelist一次視圖請(qǐng)求即獲取到請(qǐng)求位置position。
(2)獲取分頁(yè)問題列表questionPageList當(dāng)前position下的問題對(duì)象question。
(3)從單個(gè)問題顯示的布局文件question_item.xml中獲取用于顯示問題內(nèi)容的TextView對(duì)象txtTitle和用于顯示選擇題備選答案列表或問答題文本編輯框的ListView對(duì)象lvChecks。
(4)獲取question對(duì)象的_qTitle(問題標(biāo)題)字段的值加載到txtTitle。
(5)獲取question對(duì)象的_qType(問題類型)字段并判斷。如果_qType為單選題,則為備選答案視圖對(duì)象lvChecks創(chuàng)建數(shù)據(jù)適配器ArrayAdapter類的對(duì)象adapter。在數(shù)據(jù)適配器中調(diào)用GetQuestionAnswers方法獲取到當(dāng)前問題的備選答案字符串?dāng)?shù)組加載。適配器加載的每項(xiàng)備選答案為單選題單個(gè)備選答案布局文件。設(shè)置adapter為lvChecks的數(shù)據(jù)適配器。設(shè)置lvChecks備選答案列表的選擇模式為單選。最后調(diào)用loadQuestionAnswers方法向lvChecks加載顯示默認(rèn)答案的選中狀態(tài)。
(6)如果_qType為多選題,流程與單選題類似。不同之處在于備選答案項(xiàng)對(duì)應(yīng)的布局文件為適配器加載的每項(xiàng)備選答案對(duì)應(yīng)的多選題備選答案布局文件,lvChecks備選答案列表的選擇模式為多選。
(7)如果_qType為問答題,則為答案視圖對(duì)象lvChecks創(chuàng)建數(shù)據(jù)適配器TextQuestionAdapter類的對(duì)象adapter。在數(shù)據(jù)適配器GetView中創(chuàng)建文本編輯框控件對(duì)象txtedit,并根據(jù)對(duì)象question的答案數(shù)據(jù)類型點(diǎn)擊文本框時(shí)加載不同的輸入法。設(shè)置adapter為lvChecks的數(shù)據(jù)適配器。
6 總結(jié)
基于Android的調(diào)查客戶端問卷問題分頁(yè)加載顯示的實(shí)現(xiàn)復(fù)雜在多個(gè)視圖布局的嵌套,問卷問題列表需要列表視圖布局顯示,問題備選答案列表也需要列表視圖布局顯示,而單選、多選題目的備選答案項(xiàng)又需要不同的布局。
參考文獻(xiàn):
[1]張旭.電信運(yùn)營(yíng)商空中營(yíng)業(yè)廳系統(tǒng)客戶端的研究與設(shè)計(jì)[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012,13:185-186.
[2]朱德平.Spring軟件開發(fā)框架新組件探討[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2013,12:61-62.
[3]狄榮.基于Android的進(jìn)銷存系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2013,06:130-131.
作者簡(jiǎn)介:顧東虎(1980.8-),男,山西大同人,碩士,講師,工程師職稱,主要研究方向:軟件工程、嵌入式系統(tǒng)及數(shù)據(jù)存儲(chǔ);李紅育(1983.2-),男,河南新鄭人,碩士,講師,工程師職稱,主要研究方向:軟件工程、嵌入式數(shù)據(jù)存儲(chǔ)。
作者單位:云南工商學(xué)院,昆明 651700