安卓日歷管理系統(tǒng)_第1頁(yè)
安卓日歷管理系統(tǒng)_第2頁(yè)
安卓日歷管理系統(tǒng)_第3頁(yè)
安卓日歷管理系統(tǒng)_第4頁(yè)
安卓日歷管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 目 錄目 錄1安卓日歷管理系統(tǒng)2摘 要2Abstract3第一章 系統(tǒng)需求分析31.1 系統(tǒng)的需求分析3第二章 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)42.1 系統(tǒng)主界面的設(shè)計(jì)和實(shí)現(xiàn)42.1.1 系統(tǒng)的功能模塊說(shuō)明42.1.2 系統(tǒng)的功能模塊結(jié)構(gòu)圖42.1.3 系統(tǒng)主界面的頭部菜單欄62.1.4 系統(tǒng)的日歷界面82.1.5 系統(tǒng)的日歷特色顯示102.2 系統(tǒng)任務(wù)界面的設(shè)計(jì)112.2.1 任務(wù)界面的數(shù)據(jù)庫(kù)準(zhǔn)備122.2.2 任務(wù)界面之新增界面152.2.3 任務(wù)界面之總?cè)粘探缑?42.2.3 任務(wù)界面之單一日程界面262.2.4 任務(wù)界面之實(shí)現(xiàn)對(duì)已有日程日期的標(biāo)記272.3 系統(tǒng)設(shè)置界面282.4 系統(tǒng)關(guān)于界面292

2、.5 系統(tǒng)底部菜單項(xiàng)292.5.1 日歷界面使用的底部菜單項(xiàng)302.5.2 其他界面使用的底部菜單項(xiàng)設(shè)計(jì)與實(shí)現(xiàn)322.6 農(nóng)歷算法34第三章 程序測(cè)試393.1測(cè)試用例393.2功能性測(cè)試393.3測(cè)試過(guò)程記錄403.4測(cè)試結(jié)果42結(jié)束語(yǔ)43參考文獻(xiàn)44安卓日歷管理系統(tǒng)摘 要隨著生活節(jié)奏的逐步加快,人們常會(huì)有許多的重要工作需要去安排或完成,個(gè)人的日常工作、領(lǐng)導(dǎo)的重要會(huì)議、個(gè)人重要日期或者時(shí)間等。這些工作都需要在特定的時(shí)間給予醒目標(biāo)識(shí)或者提示。而為了能盡可能的減少人們的負(fù)擔(dān),來(lái)更有效率的工作和更舒適的生活。這就需要有專(zhuān)門(mén)的日程管理系統(tǒng)來(lái)安排這些事務(wù)。日程管理系統(tǒng)的主要功能是完成個(gè)人一般日程和重要

3、日程安排并提供提醒和查看的功能。本系統(tǒng)是一個(gè)基于安卓手機(jī)平臺(tái)的日程管理系統(tǒng),具有基本的日程活動(dòng)的增、刪、改、查功能,在日歷瀏覽中可突出顯示有安排的日期。用戶可根據(jù)不同的活動(dòng)設(shè)置任務(wù),便于對(duì)日程的管理。系統(tǒng)還具備提醒程序,可幫助管理重要活動(dòng),并且實(shí)現(xiàn)與網(wǎng)絡(luò)數(shù)據(jù)同步的功能。系統(tǒng)是基于安卓的基礎(chǔ)知識(shí)和Java語(yǔ)言,以及SQLite提供的數(shù)據(jù)的管理來(lái)開(kāi)發(fā)的,最終取得了較圓滿的成果。關(guān)鍵詞:日歷管理 Java 安卓AbstractAs the pace of life has been accelerating gradually, people often have many of the impor

4、tant work need to arrange or complete, personal daily work, leadership of the important meeting, personal important date or time, etc. All this work need to be in particular time to give marked logo or hints. And in order to reduce the burden of the people as much as possible, to more efficient work

5、 and more comfortable life. This has to be special schedule management system to arrange these affairs. Schedule management system's main function is to make the personal general schedule and important schedules and provide remind and view function.This system is a result of the mobile platform

6、based on schedule management system, have the basic agenda of activity increase and delete, change, check function, in the calendar can browse highlight is the date of the arrangement. Users can set according to different activities task, and is convenient for the management of the schedule. The sys

7、tem also has the remind program can help manage the important activities, and realize and network data synchronization function.System is based on the foundation of andros knowledge and Java language, and to provide the data management SQLite to development, and finally achieved satisfactory results

8、.Key words: Schedule management; Java;Android第一章 系統(tǒng)需求分析1.1 系統(tǒng)的需求分析該系統(tǒng)是一個(gè)基于安卓平臺(tái)的手機(jī)日程管理軟件。它是為本軟件的持有者提供日程管理方面服務(wù)的,它包括日歷的查看、日歷上日期對(duì)應(yīng)日程的查看、總?cè)粘痰牟榭?、日程的增加、日程的刪除、日程的修改、對(duì)本軟件的設(shè)置以及軟件相關(guān)信息的查看等。本軟件有助于人們記住重要的日程并給予提醒,也有助于人們更好的調(diào)節(jié)自己的時(shí)間來(lái)減輕生活上的一些負(fù)擔(dān),更輕松及有效的過(guò)好每一天。系統(tǒng)是基于安卓的基礎(chǔ)知識(shí)和Java語(yǔ)言,以及SQLite提供的數(shù)據(jù)的管理來(lái)開(kāi)發(fā)的,最終取得了較圓滿的成果。第二章 系統(tǒng)設(shè)計(jì)

9、與實(shí)現(xiàn)2.1 系統(tǒng)主界面的設(shè)計(jì)和實(shí)現(xiàn)2.1.1 系統(tǒng)的功能模塊說(shuō)明(1)日歷查看模塊:擁有一個(gè)完整的日歷界面,包括頭部的年月日、生肖、閏年的顯示,還有每個(gè)日期上都分別有陽(yáng)歷和陰歷的日期顯示,并且日歷中包含了各個(gè)重要的節(jié)日或紀(jì)念日等。在日歷界面上每個(gè)日期都會(huì)跳到當(dāng)前日期的日程添加界面或者是日程顯示界面。日歷界面上還有對(duì)存在日程的標(biāo)記,有利于人們更好的管理日程。(2)日程管理模塊:在本模塊中包括總的日程顯示頁(yè)面和日歷頁(yè)面所跳轉(zhuǎn)到的日程顯示界面或者是日程添加界面???cè)粘田@示界面每一個(gè)日程都會(huì)有它所包含的日期、時(shí)間、日程類(lèi)型、重復(fù)類(lèi)型和日程內(nèi)容。日歷日期所對(duì)應(yīng)的日程顯示界面也是相應(yīng)的顯示。而在日程添加

10、界面中包含了顯示界面所對(duì)應(yīng)的各項(xiàng)數(shù)據(jù)、添加日程成功后會(huì)有對(duì)應(yīng)日歷日期的標(biāo)記。另外也有對(duì)日程的一系列管理操作的功能。(3)設(shè)置界面模塊:在設(shè)置中包括了對(duì)日程的類(lèi)型和重復(fù)類(lèi)型的默認(rèn)設(shè)置。(4)關(guān)于界面模塊:關(guān)于界面中包含了本軟件的設(shè)計(jì)信息及一些基本信息。2.1.2 系統(tǒng)的功能模塊結(jié)構(gòu)圖在程序設(shè)計(jì)分析的基礎(chǔ)上,結(jié)合實(shí)際情況,得出本程序的功能模塊結(jié)構(gòu)圖。在結(jié)構(gòu)圖中包括了功能模塊的表示及其中部分功能的實(shí)現(xiàn)原理。首先是一個(gè)總的功能模塊的結(jié)構(gòu)圖,其中包括了系統(tǒng)設(shè)計(jì)時(shí)的總體功能概括,如圖2.12-1。日程管理系統(tǒng)主界面日歷模塊任務(wù)模塊設(shè)置模塊關(guān)于模塊日歷顯示總?cè)粘田@示類(lèi)型設(shè)置關(guān)于界面單一日程顯示圖2.12-1

11、 總系統(tǒng)功能模塊然后在總體的功能模塊后面是主體功能的詳細(xì)模塊顯示。在日歷界面顯示上可分為幾個(gè)部分,詳細(xì)見(jiàn)圖2.12-2,日歷模塊日歷模塊日歷模塊日歷顯示陰歷顯示節(jié)假日顯示日期顯示圖2.12-2 日歷顯示模塊 還有就是日程的功能模塊的詳細(xì)介紹??傮w書(shū)寫(xiě)了日程添加界面的功能點(diǎn),結(jié)構(gòu)圖如圖2.12-3所示,新建日程顯示重復(fù)類(lèi)型選擇日程時(shí)間書(shū)寫(xiě)日程類(lèi)型選擇日程內(nèi)容書(shū)寫(xiě)圖2.12-3 日程界面模塊2.1.3 系統(tǒng)主界面的頭部菜單欄制作這個(gè)頭部菜單欄是為了提升軟件的可操作性,我用的是TabHost+RadioGroup相結(jié)合的方法來(lái)制作這個(gè)部分的。菜單欄的底部位置是通過(guò)TabHost這個(gè)布局來(lái)實(shí)現(xiàn)的,然后

12、是LinearLayout的線性布局來(lái)布置內(nèi)容。內(nèi)部的選項(xiàng)卡是通過(guò)TabWiget來(lái)實(shí)現(xiàn)首先建立好Android工程(我的工程名為:ScheduleManager),在工程下的res/layout下建立一個(gè)名為main的空xml文件,然后在這個(gè)文件里按照思路來(lái)添加布局代碼。主界面的菜單選項(xiàng)使用RadioGroup來(lái)建立,在這里的布局中RadioGroup里容納4個(gè)RadioButton,而RadioButton是單選按鈕。在這種情況下就只有也只能有一個(gè)RadioButton能被選擇,并且在開(kāi)始時(shí)默認(rèn)了第一個(gè)按鈕被選中。其中RadioButton的實(shí)現(xiàn)方式是在設(shè)置了內(nèi)部的文字,然后再按鈕的頂部上

13、添加上圖片,實(shí)現(xiàn)的代碼如下:<RadioButton android:text="string/main_date" android:drawableTop="drawable/tab_date" android:id="+id/radio_button0" android:checked="true" style="style/main_tab_bottom"/>從上述代碼可以看到,在菜單的每個(gè)選項(xiàng)卡樣式都是調(diào)用了style上的main_tab_bottom來(lái)實(shí)現(xiàn)樣式的,而main

14、_tab_bottom的背景background的值是drawable/btn_bg ,btn_bg不是一個(gè)簡(jiǎn)單的背景圖片,而是一個(gè)xml文件,通過(guò)這個(gè)文件可以實(shí)現(xiàn)菜單選項(xiàng)卡切換時(shí)的背景切換的效果,使得這個(gè)菜單欄更加的美觀,代碼是使用了安卓的selector來(lái)實(shí)現(xiàn),在這里是通過(guò)不停的條件來(lái)判斷使用哪一個(gè)item的,里面包括了幾個(gè)屬性值,如是否獲得焦點(diǎn)、是否響應(yīng)事件、是否點(diǎn)擊三個(gè)條件。實(shí)施的代碼如下:<selector xmlns:android=" <item android:state_focused="true" android:state_ena

15、bled="true" android:state_pressed="false" android:drawable="drawable/btn_bg_s" /> <item android:state_enabled="true" android:state_pressed="true" android:drawable="drawable/btn_bg_s" /> <item android:state_enabled="true&quo

16、t; android:state_checked="true" android:drawable="drawable/btn_bg_d" /></selector>制定完主頁(yè)面布局后,在下的MainPage文件中OnCreate(OnCreate方法是用來(lái)初始化Activity實(shí)例對(duì)象的)中調(diào)用布局,到現(xiàn)在為止頂部菜單欄的布局已經(jīng)基本完成,但現(xiàn)在里面所對(duì)應(yīng)的內(nèi)容還是空的。所以就需要在這里給tabHost中添加tab內(nèi)容,以第一格的tab為例,先是通過(guò)Intent的方式新建個(gè)mDate,用來(lái)實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)的方法,然后動(dòng)態(tài)用tabHost來(lái)

17、通過(guò)addTab的方法添加對(duì)應(yīng)TabSpec的值和各個(gè)屬性。最后在添加RadioGroup的選擇操作函數(shù),這里是通過(guò)switch來(lái)完成對(duì)應(yīng)按鈕的功能的實(shí)現(xiàn),在每個(gè)case項(xiàng)中通過(guò)tabHost.setCurrentTabByTag來(lái)給與特定的值實(shí)現(xiàn)頁(yè)面上的跳轉(zhuǎn)。最終的效果如圖2.13-1:圖2.13-1 頭部菜單欄效果圖2.1.4 系統(tǒng)的日歷界面系統(tǒng)主界面默認(rèn)選擇日歷界面在頭部菜單欄下方。1.首先是建立一個(gè)布局文件,上面一部分是顯示年月日、生肖和農(nóng)歷的干支紀(jì)年。使用的是一個(gè)TextView類(lèi),對(duì)應(yīng)的在日歷的CalendarActivity文件中加入函數(shù)來(lái)添加頭部的年份等信息。首先需要寫(xiě)了一個(gè)C

18、alendarView類(lèi),這是為日歷顯示所寫(xiě)的一個(gè)類(lèi),在其中使用重載的方法定義了幾個(gè)不同參數(shù)的CalendarView,用于不同的情況。在CalendarActivity中實(shí)例化CalendarView并且使用CalendarView中的一個(gè)方法CalendarView(this, getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);然后書(shū)寫(xiě)方法來(lái)添加頭部的年份 閏哪月等信息。首先是對(duì)這個(gè)頁(yè)面的頭部進(jìn)行布局,通過(guò)動(dòng)態(tài)化的方法來(lái)完成。然后建立一個(gè)可以進(jìn)行改變值的StringBuffer類(lèi)型的參數(shù)textDate。對(duì)這個(gè)參數(shù)進(jìn)行appen

19、d操作,添加例如年月日的知道參數(shù)里。其中有一個(gè)閏年判斷的條件函數(shù),是通過(guò)calV.getLeapMonth()的值驚醒判斷的。完成后對(duì)界面使用setText方法來(lái)賦值到界面上。最后是對(duì)界面的一些美化,同樣使用動(dòng)態(tài)布局模式進(jìn)行。2.下面是日歷界面中主體日期部分顯示的完成在CalendarActivity文件初始化實(shí)例對(duì)象時(shí)加入動(dòng)態(tài)添加布局文件的方法。我將此方法命名為addGridView。在這個(gè)方法中同樣是先進(jìn)行動(dòng)態(tài)化布局,由于這里用的是GridView,這個(gè)GridView應(yīng)用于將一系列的空間組織成二維網(wǎng)格的形式顯示出來(lái),所以適用于我在這里進(jìn)行的日期界面的建立。同樣的首先是動(dòng)態(tài)化布局的建立,這

20、可以實(shí)例化GridView為gridView參數(shù)進(jìn)行的。在這里需要添加GridView控件的列為7,列寬為46。并且還加上判斷屏幕大小的條件,這需要加入取得屏幕大小的對(duì)應(yīng)函數(shù),這里如果是800*480屏幕的話,就將列寬設(shè)置為69。然后進(jìn)行設(shè)置水平和豎直的間距、取值邊框、設(shè)置居中等操作。在這個(gè)方法里面還需加入個(gè)OnTouch方法,用來(lái)將gridView中的觸摸事件回傳給gestureDetector,進(jìn)行下面的觸摸操作,即: /將gridview中的觸摸事件回傳給gestureDetectorOverridepublic boolean onTouch(View v, MotionEvent e

21、vent) return CalendarActivity.this.gestureDetector.onTouchEvent(event););創(chuàng)建完日歷的布局后,是在里面添加上具體的日期。就當(dāng)前顯示的頁(yè)面來(lái)說(shuō),是建立幾個(gè)對(duì)應(yīng)的參數(shù),用來(lái)顯示或傳接數(shù)據(jù)。例如在函數(shù)開(kāi)始時(shí)就String dayNumber = new String49; 這是作為對(duì)GridView控件內(nèi)進(jìn)行標(biāo)記序列的,用于下面條件語(yǔ)句的判斷等,還有就是界面內(nèi)的一些控件名的實(shí)例化。 然后是動(dòng)態(tài)化的對(duì)頁(yè)面進(jìn)行屬性值的設(shè)置。其中在對(duì)日期中的第一行,即周一等值的這行,設(shè)置字的顏色及背景圖。得出這行的位置就需要通過(guò)對(duì)參數(shù)position

22、(對(duì)應(yīng)編號(hào))進(jìn)行判斷是否在7以內(nèi)。 下一步是當(dāng)前月信息的顯示,這也需要條件函數(shù)來(lái)判斷是否為當(dāng)前月,也是來(lái)判斷參數(shù)position是否在范圍內(nèi)。在這個(gè)月中還需對(duì)當(dāng)天來(lái)一個(gè)特殊化,即設(shè)置當(dāng)天日期的背景為圖片current_day_bgc,字色為白。 在這些操作外,還需要得到一些數(shù)值來(lái)用于日期數(shù)據(jù)的插入,在這里建立了個(gè)getCalendar方法,如判斷是否為閏年的函數(shù)返回值isLeapyear,某月的總天數(shù),某月的第一天是星期幾,上個(gè)月總天數(shù)。在這方法中再執(zhí)行方法getweek,用來(lái)得出以后需要標(biāo)記的日期,這個(gè)在后面來(lái)介紹。通過(guò)上述的步驟基本完成了日歷界面中的初步建設(shè)。3.由于日歷菜單需要能通過(guò)手勢(shì)

23、觸摸來(lái)進(jìn)行翻頁(yè),所以要在總體布局下建立一個(gè)ViewFlipper類(lèi),這個(gè)類(lèi)是用來(lái)實(shí)現(xiàn)屏幕的切換效果的。先是在布局中建立這個(gè)類(lèi),然后實(shí)例化手勢(shì)gestureDetector并取得布局中ViewFlipper用于下面的調(diào)用。然后是書(shū)寫(xiě)書(shū)寫(xiě)手勢(shì)的各個(gè)方法,最主要的是onFling的方法,在這里實(shí)現(xiàn)了頁(yè)面的向左及向右滑動(dòng)的操作,這個(gè)操作是由條件語(yǔ)句來(lái)實(shí)現(xiàn)的,由滑動(dòng)兩點(diǎn)的x坐標(biāo)的值進(jìn)行差值計(jì)算,如果是起點(diǎn)減去重點(diǎn)大于120時(shí)著向左滑動(dòng),反之則向右滑動(dòng)。在滑動(dòng)操作開(kāi)始,并且已切換一面后就需要載入新的一張日歷頁(yè)面,這里又會(huì)用到參數(shù)calV,當(dāng)向左滑動(dòng)時(shí)則將參數(shù)calV所代表的函數(shù)CalendarView里的

24、jumpMonth加1,代表下一個(gè)月;當(dāng)向右滑動(dòng)時(shí)則將參數(shù)calV所代表的函數(shù)CalendarView里的jumpMonth減1,代表上一個(gè)月。為了完整性剩余的手勢(shì)函數(shù)只是寫(xiě)了方法未使用。2.1.5 系統(tǒng)的日歷特色顯示在日歷的顯示中除了一些基本的日期顯示,在日期頁(yè)面頭部有每年相應(yīng)的生肖和閏年顯示,在日期上有每日的陰歷以及節(jié)假日的顯示。這里有兩個(gè)方法,分別是LunarCalendar 和SpecialCalendar。在LunarCalendar里面包括干支紀(jì)年,陰歷,生肖,節(jié)假日等信息。例如生肖則是建立一個(gè)字節(jié)數(shù)組來(lái)記錄十二生肖,并且用函數(shù)來(lái)傳回參數(shù)對(duì)應(yīng)的生肖。final public Str

25、ing animalsYear(int year) final String Animals = new String "鼠", "牛", "虎", "兔", "龍", "蛇","馬", "羊", "猴", "雞", "狗", "豬" ;return Animals(year - 4) % 12;同樣的其他信息,如節(jié)假日的名稱(chēng),也是通過(guò)字節(jié)數(shù)組來(lái)儲(chǔ)存的。在S

26、pecialCalendar是閏年的判斷函數(shù),每月天數(shù),以及對(duì)每月的第一天星期的判斷。閏年通過(guò)傳回年值通過(guò)函數(shù)進(jìn)行判斷,并傳回布爾值。每月的天數(shù)用switch進(jìn)行判斷賦值給月份天數(shù)的參數(shù)。 對(duì)每月的第一天為星期幾的判斷并指定。/指定某年中的某月的第一天是星期幾public int getWeekdayOfMonth(int year, int month)Calendar cal = Calendar.getInstance();cal.set(year, month-1, 1);dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1;return dayOfW

27、eek;最終的效果如圖2.15-1:圖2.15-1 日歷界面的最終實(shí)現(xiàn)圖2.2 系統(tǒng)任務(wù)界面的設(shè)計(jì)任務(wù)界面包括任務(wù)主界面(所有日程的顯示)和對(duì)應(yīng)日期任務(wù)的顯示,任務(wù)的添加等。在任務(wù)界面涉及到日程的數(shù)據(jù)存儲(chǔ),所以先介紹下關(guān)于日程的數(shù)據(jù)存儲(chǔ)以及有日程的日期存儲(chǔ)(為日歷界面的標(biāo)記服務(wù))。2.2.1 任務(wù)界面的數(shù)據(jù)庫(kù)準(zhǔn)備(1)數(shù)據(jù)庫(kù)里表的建立分別建立了schedule表(日程的表)和scheduletagdate(標(biāo)記日期所需的表)Android 提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)創(chuàng)建方式。建立DBOpenHelper類(lèi)繼承到SQLiteOpenHelper ,實(shí)現(xiàn)onCreate 和 onUpgrade 兩個(gè)方法。

28、OnCreate方法是用于初次使用軟件時(shí)生成數(shù)據(jù)庫(kù),onUpgrade方法是用于升級(jí)軟件時(shí)更新數(shù)據(jù)庫(kù)表結(jié)構(gòu)。首先是schedule表的建立,在這個(gè)表中包括日程ID、日程類(lèi)型的ID、日程重復(fù)類(lèi)型的ID、日程正文內(nèi)容、日程日程時(shí)間這幾個(gè)參數(shù)。建立時(shí)對(duì)應(yīng)需要寫(xiě)上參數(shù)名、參數(shù)類(lèi)型、主鍵等。db.execSQL("CREATE TABLE IF NOT EXISTS schedule(scheduleID integer primary key autoincrement,scheduleTypeID integer,remindID integer,scheduleContent text,

29、scheduleDate text)"); 下面是scheduletagdate表的建立,在這個(gè)表中包括標(biāo)記的ID、年信息、月信息、日信息、日程ID這幾個(gè)參數(shù)。db.execSQL("CREATE TABLE IF NOT EXISTS scheduletagdate(tagID integer primary key autoincrement,year integer,month integer,day integer,scheduleID integer)"); 建立完表后是繼續(xù)寫(xiě)入onUpgrade方法,這個(gè)方法會(huì)在數(shù)據(jù)庫(kù)升級(jí)時(shí)被觸發(fā),以便于軟件升級(jí)時(shí)更新

30、表結(jié)構(gòu)。public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) db.execSQL("DROP TABLE IF EXISTS schedule");db.execSQL("DROP TABLE IF EXISTS scheduletagdate");onCreate(db);(2)再分別建立ScheduleVO 和ScheduleDateTag ,里面分別寫(xiě)了表里面各個(gè)數(shù)據(jù)的get(表示獲取某個(gè)變量值)和set(表示設(shè)置某個(gè)變量值)方法,以便于調(diào)用。(3)建立S

31、cheduleDAO文件,這個(gè)文件是用來(lái)寫(xiě)數(shù)據(jù)庫(kù)的查找、刪除等方法。 首先是需要實(shí)例化DBOpenHelper用于數(shù)據(jù)庫(kù)數(shù)據(jù)的get與set。private DBOpenHelper dbOpenHelper = null;public ScheduleDAO(Context context)dbOpenHelper = new DBOpenHelper(context, "schedules.db");下面就是對(duì)表中數(shù)據(jù)的操作了,包括了保存日程信息、查詢某一條日程信息、查詢所有的信息、刪除日程、將日程標(biāo)記的日期保存到數(shù)據(jù)庫(kù)中。(1)保存日程信息,先是從日程添加頁(yè)面里獲取日

32、程類(lèi)型的ID、日程重復(fù)類(lèi)型的ID、日程正文內(nèi)容、日程日程時(shí)間這幾個(gè)參數(shù),然后是使用ContentValues類(lèi)(這個(gè)類(lèi)是一個(gè)鍵值對(duì),是用來(lái)存儲(chǔ)名值對(duì),它的名一般是String類(lèi)型,而值都是基本類(lèi)型)來(lái)new一個(gè)參數(shù),用這個(gè)參數(shù)的put方法將這些個(gè)參數(shù)放入到數(shù)據(jù)庫(kù)中。values.put("scheduleTypeID", scheduleVO.getScheduleTypeID();/放入日程類(lèi)型IDvalues.put("remindID", scheduleVO.getRemindID(); /放入重復(fù)類(lèi)型ID values.put("sc

33、heduleContent", scheduleVO.getScheduleContent();/放入日程正文內(nèi)容 values.put("scheduleDate", scheduleVO.getScheduleDate();/放入日程日期信息最后調(diào)用添加方法insert。 db.insert("schedule", null, values);/插入信息另外需要moveToFirst方法來(lái)判斷是否為空,進(jìn)行相關(guān)的操作。(2)查詢某一條日程信息,由于我這里的設(shè)計(jì)是通過(guò)對(duì)日程的點(diǎn)擊來(lái)查看當(dāng)前點(diǎn)擊日期的詳細(xì)信息,即是根據(jù)日程的ID來(lái)查看的。and

34、roid sqlite的查詢方法是query方法,它的查詢語(yǔ)句是:db.query("schedule", new String"scheduleID","scheduleTypeID","remindID","scheduleContent","scheduleDate", "scheduleID=?", new StringString.valueOf(scheduleID), null, null, null);另外還需要的是判斷語(yǔ)句,先用curso

35、r.moveToFirst()判斷curor是否為空值,不為空則就給cursor賦值,空著直接cursor.close()來(lái)關(guān)閉。(3)查詢所有的日程信息,由于所有日期可能不止一個(gè),所以返回值設(shè)為數(shù)組形式。查詢依舊是用query方法,這里的的where語(yǔ)句相關(guān)的就直接設(shè)為null值。其他的依舊與查詢一條語(yǔ)句相仿。(4)刪除日程,這里的刪除日程需要將日程及對(duì)應(yīng)日期上的標(biāo)記一起刪除,這樣才可以便于管理,刪除使用的語(yǔ)句是delete。db.delete("schedule", "scheduleID=?", new StringString.valueOf(s

36、cheduleID);/刪除日程信息db.delete("scheduletagdate", "scheduleID=?", new StringString.valueOf(scheduleID);/刪除日程對(duì)應(yīng)的日期標(biāo)識(shí)信息(5)將日程標(biāo)志日期保存到數(shù)據(jù)庫(kù)中,這里是為了將在日期上標(biāo)識(shí)的信息存儲(chǔ)到數(shù)據(jù)庫(kù)中,方法同第一步的保存相仿,只是數(shù)據(jù)的不一樣,而且使用的是數(shù)組形式。for(int i = 0; i < dateTagList.size(); i+)/以for循環(huán)的方式進(jìn)行dateTag = dateTagList.get(i);Content

37、Values values = new ContentValues();values.put("year", dateTag.getYear();/放入年信息values.put("month", dateTag.getMonth();/放入月信息values.put("day", dateTag.getDay();/放入日信息values.put("scheduleID", dateTag.getScheduleID();/翻入日程的IDdb.insert("scheduletagdate",

38、 null, values);/插入到表scheduletagdate中(6)只查詢出當(dāng)前日程的日期,這個(gè)查詢語(yǔ)句是通過(guò)當(dāng)前月的年和月信息來(lái)得到日程標(biāo)記上的所有信息。這里也是使用query語(yǔ)句進(jìn)行查詢的,只不過(guò)改變了里面的查詢使用的參數(shù)。所以方法類(lèi)同于上面所有日程的查詢。 (7)當(dāng)點(diǎn)擊每一個(gè)gridview中item時(shí),查詢出此日期上所有的日程標(biāo)記(scheduleID),通過(guò)點(diǎn)擊后得到對(duì)應(yīng)日期的年月日信息,然后用query方法得到次日程標(biāo)記的ID,用于后面得到想到相關(guān)的日程信息。query("scheduletagdate", new String"schedu

39、leID", "year=? and month=? and day=?", newStringString.valueOf(year),String.valueOf(month),String.valueOf(day), null, null, null);(8)關(guān)閉數(shù)據(jù)庫(kù)。判斷后直接關(guān)閉當(dāng)前數(shù)據(jù)庫(kù)。if(dbOpenHelper != null)dbOpenHelper.close();2.2.2 任務(wù)界面之新增界面新增界面是通過(guò)對(duì)日歷界面上單一日期的點(diǎn)擊來(lái)實(shí)現(xiàn)跳轉(zhuǎn)的。(1)首先為了界面的美觀我建了幾個(gè)帶邊框的類(lèi),這些類(lèi)是在原有的textview等基本類(lèi)的基礎(chǔ)

40、上進(jìn)行美化后形成的。這里一共做了下面的三個(gè)實(shí)現(xiàn)了畫(huà)筆效果的類(lèi)。首先是帶下邊框的TextView,這里TextView類(lèi)的基礎(chǔ)上用畫(huà)筆實(shí)現(xiàn)了下邊框的效果。Paint paint = new Paint();/ 實(shí)例化一支畫(huà)筆paint.setColor(android.graphics.Color.BLACK); / 設(shè)置所繪制的邊框顏色為黑色canvas.drawLine(0, this.getHeight() - 1, this.getWidth() - 1, this.getHeight() - 1, paint); / 繪制下邊框帶邊框的EditText,這原本是一個(gè)基本的EditTex

41、t,文本編輯框的類(lèi),在這里加上了特殊的樣式、顏色及邊框的圓弧效果。Paint paint = new Paint();/ 實(shí)例化一支畫(huà)筆paint.setStrokeWidth(1);/設(shè)置空心現(xiàn)款paint.setStyle(Style.STROKE);/設(shè)置樣式paint.setColor(android.graphics.Color.GRAY);/設(shè)置顏色paint.setAntiAlias(true);/抗鋸齒方法RectF rectF = new RectF(2,0,this.getWidth()-2,this.getHeight()-2);/現(xiàn)在設(shè)置相關(guān)的參數(shù)用于下面的操作。can

42、vas.drawRoundRect(rectF, 8, 8, paint);/畫(huà)上圓弧最后一個(gè)是帶邊框的TextView,這個(gè)與上述的EditText相類(lèi)似,完成這個(gè)列。完成這些邊框類(lèi)之后就是使用它們,這個(gè)與以前的基本類(lèi)相似,只是將布局中原來(lái)的基本類(lèi)名類(lèi),如TextView,改為對(duì)應(yīng)路徑的名稱(chēng)為。(BorderTextView是新建的TextView類(lèi)的文件名。) (2)新增日程界面的布局,建立一個(gè)名為schedule的空布局文件。這里的使用的是相對(duì)布局RelativeLayout。這樣可以更清晰將各個(gè)框框組合在一起,使得更加美觀。在這個(gè)界面中,總體的以RelativeLayout這個(gè)相對(duì)布局

43、名為總體的布局類(lèi),最上面是標(biāo)題欄,這就是一個(gè)上述建立的一個(gè)帶邊框的TextView類(lèi)。<com.pwp.borderText.BorderTextView android:id="+id/scheduleTop"/id號(hào) android:gravity="center"/位置居中 android:layout_width="fill_parent" android:layout_height="40dp"/這兩個(gè)分別為寬和高 android:background="drawable/top_day&

44、quot;/背景圖片的位置 android:textStyle="bold"/文本的樣式加粗 android:clickable="true"/可點(diǎn)擊的選項(xiàng) android:textColor="#000000"/文本顏色設(shè)為黑色 android:text="編輯日程"/文本框上的文字 />下面分別為日程類(lèi)型及重復(fù)類(lèi)型這兩個(gè)類(lèi)型的選擇的點(diǎn)擊框。由于使用的相對(duì)布局,那么就需要自己設(shè)置這兩個(gè)點(diǎn)擊框的位置。這里先建立了日程類(lèi)型的文本框,以layout_below來(lái)將這個(gè)文本框放在標(biāo)題框(用id來(lái)定位標(biāo)題框)下面,下

45、面幾個(gè)需要特殊設(shè)定的參數(shù): android:layout_below="id/scheduleTop"/文本框的位置設(shè)置 android:layout_width="160dp"/文本框的寬 android:layout_height="40dp"/文本框的高 android:drawableRight="drawable/schedule_type"/在這個(gè)文本框右邊添加一個(gè)圖標(biāo)然后是添加日程重復(fù)方式的文本框,這需要放在日程類(lèi)型文本框的右邊,這是利用layout_ toRightOf來(lái)實(shí)現(xiàn),相應(yīng)的也要設(shè)置位于標(biāo)題

46、框下方,其他的與上面的相類(lèi)似。 android:layout_toRightOf="id/scheduleType"/文本框的位置設(shè)置位于右方 android:drawableRight="drawable/schedule_type"/文本框的位置設(shè)置位于下方下面還有時(shí)間的點(diǎn)擊修改框、日程文本框及最后的保存及取消的按鈕。最后效果如圖2.22-1。 圖2.22-1 日程添加界面效果圖(2)寫(xiě)一個(gè)ScheduleAddActivity 類(lèi)來(lái)調(diào)用布局和書(shū)寫(xiě)方法新增界面的上方有兩個(gè)TextView是用來(lái)選擇類(lèi)型的,另有一個(gè)時(shí)間顯示框可以用來(lái)顯示傳過(guò)來(lái)的時(shí)間或者

47、修改時(shí)間。選擇類(lèi)型的實(shí)現(xiàn)方法以其中一個(gè)為例首先是取得這TextView的位置,實(shí)例化它,以便于后面的使用,scheduleType = (BorderTextView) findViewById(R.id.scheduleType);點(diǎn)擊時(shí)跳到選擇界面并傳值,跳轉(zhuǎn)的時(shí)候需要獲得原來(lái)界面上的日程類(lèi)型,這里需要在點(diǎn)擊觸發(fā)效果的方法上將數(shù)據(jù)傳到類(lèi)型選擇頁(yè)面上去,用于顯示它的默認(rèn)值。scheduleType.setOnClickListener(new OnClickListener() /日程類(lèi)型的點(diǎn)擊事件 Overridepublic void onClick(View v) /點(diǎn)擊時(shí)方法實(shí)現(xiàn)的內(nèi)

48、容schText = scheduleText.getText().toString();Intent intent = new Intent();intent.setClass(ScheduleAddActivity.this, ScheduleTypeView.class);/實(shí)現(xiàn)頁(yè)面從日程添加頁(yè)面到日程類(lèi)型選擇頁(yè)面的跳轉(zhuǎn)intent.putExtra("sch_remind", new intsch_typeID,remindID);/跳轉(zhuǎn)時(shí)需要傳過(guò)去的數(shù)據(jù),兩個(gè)數(shù)據(jù)組成一個(gè)數(shù)組傳過(guò)去startActivity(intent);/運(yùn)行);這樣就需要一個(gè)新建Schedu

49、leTypeView文件來(lái)實(shí)現(xiàn)跳轉(zhuǎn)后的界面。這里還包括一個(gè)CalendarConstant類(lèi),這個(gè)類(lèi)是用于記錄日程類(lèi)型和重復(fù)類(lèi)型的字符數(shù)組,以便于類(lèi)型選擇的調(diào)用。public class CalendarConstant public final static String sch_type = "會(huì)議", "約會(huì)", "電話", "紀(jì)念日", "生日", "課程", "其他" ; / 日程類(lèi)型的值public final static String re

50、mind = "當(dāng)天有效","每天重復(fù)","每周重復(fù)","每月重復(fù)","每年重復(fù)"/重復(fù)類(lèi)型的值這里是存儲(chǔ)ScheduleTypeView和ScheduleRemindView里面選項(xiàng)的value值。這個(gè)頁(yè)面是通過(guò)實(shí)例化來(lái)實(shí)現(xiàn)布局的:LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); /設(shè)置寬與高cc = new

51、 CalendarConstant();layout = new LinearLayout(this); / 實(shí)例化布局對(duì)象layout.setOrientation(LinearLayout.VERTICAL);layout.setBackgroundResource(R.drawable.schedule_bk);/設(shè)置背景圖片layout.setLayoutParams(params);實(shí)例化布局里的組件為后面使用時(shí)做準(zhǔn)備,用于給這些組件添加各項(xiàng)參數(shù)。group = new RadioGroup(this);/選擇按鈕組btSave = new BorderTextView(this,n

52、ull);/保存按鈕實(shí)例化btCancel = new BorderTextView(this, null); /取消按鈕實(shí)例化textTop = new BorderTextView(this, null); /頂部文本實(shí)例化這里有個(gè)從ScheduleAddActivity傳來(lái)的值,是日程新增界面里的日程類(lèi)型的已選擇的ID值,用來(lái)選擇RadioGroup的默認(rèn)選項(xiàng)Intent intent = getIntent();int sch_remind = intent.getIntArrayExtra("sch_remind"); if(sch_remind != null)

53、 /判斷不為空時(shí)進(jìn)行下列的賦值sch_typeID = sch_remind0; /日程類(lèi)型的賦值remindID = sch_remind1; /重復(fù)類(lèi)型的賦值for(int i = 0 ; i < cc.sch_type.length ; i+)radio = new RadioButton(this);if(i = sch_typeID) /判斷是否是當(dāng)前選擇的項(xiàng)radio.setChecked(true); /設(shè)置為已選擇 radio.setText(cc.sch_typei); /設(shè)置文本內(nèi)容 radio.setId(i); /設(shè)置編號(hào) radio.setTextColor(C

54、olor.BLACK); /設(shè)置文本顏色 group.addView(radio); /設(shè)這系列的內(nèi)容添加到數(shù)組中 將RadioGroup加入到布局中去:layout.addView(group); RadioGroup的觸發(fā)效果,再點(diǎn)擊這里的每一個(gè)選項(xiàng)都會(huì)顯示已選中并且會(huì)將選擇項(xiàng)的ID值傳到schType_temp中用于后面的使用。group.setOnCheckedChangeListener(new OnCheckedChangeListener() Override/重寫(xiě)onCheckedChanged方法public void onCheckedChanged(RadioGroup

55、group, int checkedId) schType_temp = checkedId;/給在上面建立的參數(shù)賦值);添加確定和取消按鈕(以確定按鈕為例),按鈕在這邊也是通過(guò)動(dòng)態(tài)方法來(lái)實(shí)施的,先新建一個(gè)布局參數(shù)layButton = new LinearLayout(this);然后給參數(shù)設(shè)置各項(xiàng)屬性,這些都是按鈕所需要兼?zhèn)涞幕緦傩?,有利于按鈕的美觀與實(shí)用性,layButton.setOrientation(LinearLayout.HORIZONTAL);layButton.setLayoutParams(params);btSave.setTextColor(Color.BLACK)

56、; /設(shè)置文本顏色btSave.setBackgroundResource(R.drawable.top_day); /設(shè)置背景btSave.setText("確定"); /設(shè)置按鈕上的文本信息btSave.setHeight(47); /設(shè)置高btSave.setWidth(160); /設(shè)置寬btSave.setGravity(Gravity.CENTER); /設(shè)置按鈕位置btSave.setClickable(true); /設(shè)置按鈕的可點(diǎn)擊性layButton.addView(btSave); /將保存按鈕添加到按鈕參數(shù)中最后將整個(gè)layButton的參數(shù)加入到整體布局中去,這里面包括添加的保存和取消按鈕這兩個(gè)功能按鈕。layout.addView(layButton); 按鈕的界面建立以后這需要為這兩個(gè)按鈕添加它上面的觸發(fā)效果,首先是確定按鈕,這個(gè)按鈕的設(shè)計(jì)是當(dāng)點(diǎn)擊按鈕后則會(huì)將已得到的schType_temp值賦給sch_typeID,然后繼續(xù)通過(guò)傳值的方法將其返還到日程添加界面去。這里傳值的方法與從日程添加界面?zhèn)髦颠^(guò)來(lái)的方法相類(lèi)似。/觸發(fā)確定按鈕btSave.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) sch

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論