999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用Android Fragment技術(shù)實現(xiàn)多級選項列表

2015-12-09 20:47:09黃立明江有福陸雅男
教育教學(xué)論壇 2015年15期

黃立明+江有福+陸雅男

摘要:以傳統(tǒng)的方式實現(xiàn)多級選項列表,不僅構(gòu)建困難,而且不利于管理,缺乏靈活性,這種情況在Android 3.0引入了Fragment技術(shù)之后得到改善。Fragment技術(shù)支持更加靈活的UI設(shè)計,增強(qiáng)了對平板和手機(jī)的兼容性,為多級選項列表的實現(xiàn)提供了一種全新的設(shè)計思路。本文完整地介紹Fragment的生命周期,并通過詳細(xì)的實例制作過程體現(xiàn)其靈活和便于管理的特性。

關(guān)鍵詞:安卓;碎片;用戶界面;多級選項列表

中圖分類號:G642 文獻(xiàn)標(biāo)志碼:A 文章編號:1674-9324(2015)15-0153-04

0 引言

Fragment中文意思是碎片,用于在一個Activity中描述部分操作界面和相關(guān)的行為。使用Fragment分散整個Activity的布局,體現(xiàn)出了良好的模塊化思維,提高了碎片的重用性。Fragment技術(shù)出現(xiàn)之前,多級選項列表的實現(xiàn)方式是先設(shè)置布局,再控制各級列表對應(yīng)視圖的展現(xiàn)或隱藏。這樣做,更多關(guān)注的是視圖層次的變化,但是根據(jù)線程安全的原則,在子線程中不能直接修改UI界面,難以實現(xiàn)靈活管理。雖然可以使用Handler消息機(jī)制解決靈活管理的問題,但是Handler機(jī)制比較煩瑣,容易導(dǎo)致代碼臃腫。然而使用Fragment,則不需要親自管理視圖層次的復(fù)雜變化,會在程序運行時修改Activity的外觀。所以我們依據(jù)Fragment靈活的特性來實現(xiàn)多級選項列表,同時保持了良好的代碼風(fēng)格。

圖1是Fragment和Activity生命周期的對比圖。Fragment作為Activity的一部分,擁有一個與其相關(guān)的視圖層次結(jié)構(gòu)以及與Activity非常相似的生命周期。

1 Fragment初始化

Fragment并非Activity的子類,F(xiàn)ragment直接繼承Object,而Activity直接繼承ContextThemeWrapper。

2 Fragment的生命周期

2.1 onAttach()

當(dāng)Fragment附加到Activity時,該回調(diào)方法會被調(diào)用。此方法中可以通過getActivity()方法獲得附加的Activity,將Fragment附加到Activity前,可以使用setArguments()方法附加參數(shù)到一個Bundle對象(初始化參數(shù)包)。在Fragment的整個生命周期中,初始化參數(shù)包都可以用Fragment的getArguments()方法獲得。

2.2 onCreate()

此回調(diào)發(fā)生在Activity需要獲取Fragment的布局時。如果Fragment是恢復(fù)的,則該回調(diào)過程中可以獲取傳入的Bundle型對象包savedInstanceState,這個對象包保存了Fragment的上一狀態(tài)數(shù)據(jù),也可以在onCreateView()和onActivityCreated()中獲取該對象包。這個過程中應(yīng)當(dāng)盡量避免可能阻塞主線程的操作,例如獲取網(wǎng)絡(luò)數(shù)據(jù),登陸驗證等。

2.3 onCreateView()

此回調(diào)發(fā)生在Fragment繪制界面并返回一個根視圖時,如果不需要視圖層次,可以返回null。該方法的聲明中包含三個參數(shù),分別是inflater,container,savedInstanceState。inflater參數(shù)可以調(diào)用inflate()方法動態(tài)加載一個xml布局文件來返回視圖;container參數(shù)指定需要插入fragment布局的父容器;savedInstanceState參數(shù)不再贅述。

2.4 onActivityCreated()

此回調(diào)過程發(fā)生在Activity的onCreate()回調(diào)之后,可以存在需要依賴于Activity視圖層次的代碼,例如進(jìn)行一些屬性的設(shè)置。

2.5 其他

只有當(dāng)Activity處于resumed狀態(tài)時,F(xiàn)ragment的生命周期才得以獨立運轉(zhuǎn),其他它時候是依賴于Activity的生命周期變化的。這種綁定Activity的時期包含了onStart()回調(diào)、onResume()回調(diào)、onPause()回調(diào)以及onStop()回調(diào)。因為我們不確定用戶是否還會返回,在onPause()方法中通常做一些數(shù)據(jù)持久化的工作,再通過onSaveInstanceState()方法保存Fragment的狀態(tài)值。

3 創(chuàng)建Fragment

創(chuàng)建Fragment首先需要創(chuàng)建擴(kuò)展Fragment類的Java類,并重寫其onCreateView()方法,在這個方法中按具體的方式創(chuàng)建碎片。

3.1 加載布局式

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){

View v = inflater.inflate(R.layout.content,null);

}

該方式通過LayoutInflater類的對象inflater調(diào)用inflate()方法加載xml布局文件來創(chuàng)建Fragment。示例代碼中加載的是content.xml布局文件。

3.2 Java代碼式

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){

//構(gòu)建Fragment的java代碼

}

該方式通過在onCreateView()方法中書寫java代碼來構(gòu)建Fragment。

4 顯示Fragment

在Activity中顯示Fragment主要有兩種方式,分別是靜態(tài)載入xml布局方式和動態(tài)管理方式。第一種方式是對碎片進(jìn)行布局,盡管這種方式已經(jīng)夠用,但是為了更好的實現(xiàn)運行時刻與屏幕上的碎片交互,還需引入動態(tài)管理的方式。

4.1 靜態(tài)載入xml

該方式是通過在Activity的xml布局文件中定義一個或多個標(biāo)記,標(biāo)記中映射了處理該Fragment的類,然后將布局設(shè)置為一個Activity類的內(nèi)容視圖來實現(xiàn)。

4.2 動態(tài)管理

該方式需要借助Android系統(tǒng)控制碎片的工具FragmentManager來實現(xiàn)的。需要注意的是,xml布局中使用標(biāo)記靜態(tài)聲明的視圖容器是不能被替換的。

實現(xiàn)步驟如下:

(1)先調(diào)用指定類的初始化函數(shù)實例化Fragment。

(2)再使用getFragmentManager()方法獲取FragmentManager,并通過其提供的接口方法beginTransaction()返回一個FragmentTransaction的實例。

(3)然后設(shè)置Fragment的轉(zhuǎn)場動畫。

(4)再指定方式(replace、remove、add)和需要替換為碎片的視圖容器(第一個參數(shù))。

(5)最后提交事務(wù)。

對應(yīng)代碼如下圖所示。

5 制作多級選項列表

使用安卓開發(fā)工具ADT設(shè)計應(yīng)用程序時,首先需要編寫應(yīng)用程序主界面Activity的xml布局文件,然后其余的工作交由java過程設(shè)計代碼來處理。通常編程人員在繼承使用系統(tǒng)類的時候,會依照實際開發(fā)需求擴(kuò)展需要的功能。此處我們需要擴(kuò)展使用ListFragment,實現(xiàn)其中的onListItemClick()方法來響應(yīng)用戶的點擊事件。

5.1 Activity的xml布局

5.2 一級列表

主要代碼如圖3所示。

代碼分析:

一級列表類TitleFragment用于顯示一級列表,是以靜態(tài)形式首先被加載,所以不需要初始化,即不需要顯式的構(gòu)造函數(shù)。在Activity調(diào)用setContentView()方法設(shè)置視圖時,F(xiàn)ragment通過xml文件中〈fragment〉標(biāo)記映射對應(yīng)的類。

第3~10行:在onCreate()方法中準(zhǔn)備列表的數(shù)據(jù);

第11~13行:在onCreate()方法中指定適配器;

第17行:在OnActivityCreated()方法中為列表設(shè)置適配器;

第22行:重寫ListFragment的onListItemClick()方法,其中調(diào)用showDetails()方法;

第27~31行:在showDetails()方法中使用動態(tài)管理的方式顯示二級列表視圖。

實現(xiàn)效果如圖4所示。

5.3 二級列表

5.3.1 主要代碼如圖5所示。

代碼分析:

二級列表類DetailFragment1用于顯示二級列表,因為二級列表需要根據(jù)一級列表的選中值來動態(tài)選擇該列表所要顯示的內(nèi)容,所以需要顯式的寫出初始化函數(shù)。

第1~2行:顯式的初始化函數(shù)newInstance()中實例化DetailFragment1_triage;

第3~6行:使用bundle包保存二級列表的狀態(tài),并返回DetailFragment1_triage類的對象df;

第11~13行:在onCreateView()方法中,為listview設(shè)置適配器;

第14行:給listview設(shè)定選擇模式;

第16行:返回視圖listview;

第23行:重寫onListItemClick()方法中調(diào)用showDetails()方法;

第26~27行:在showDetails()方法中使用動態(tài)管理的方式顯示三級列表。

實現(xiàn)效果如圖6所示。

5.4 三級列表

三級列表類DetailFragment2的實現(xiàn)和二級列表類DetailFragment1的實現(xiàn)類似。

6 最終效果

7 總結(jié)

本文基于對Fragment生命周期的理解,挖掘了Fragment技術(shù)的使用范圍,提供了一種新的基于Fragment技術(shù)實現(xiàn)多級選項列表的方法。

基于Fragment技術(shù)的應(yīng)用程序設(shè)計體現(xiàn)了如下的幾大特性。

(1)對Android手機(jī)和平板有良好的兼容性。

(2)Fragment對應(yīng)用程序框架構(gòu)建的支持,淘汰了陳舊的TabActivity和ActivityGroup。

(3)Fragment分散Activity的特性大大提升Fragment代碼的重用性。

參考文獻(xiàn):

[1]王云林.Android應(yīng)用中跨版本集成新特性的研究與實現(xiàn)[D].上海:東華大學(xué)計算機(jī)系,2013.

[2]史書明.Android應(yīng)用中消息傳遞方法分析[J].電腦知識與技術(shù),2014,10(13):2984-2986.

[3]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2013.

[4]王濤.安卓系統(tǒng)消息傳遞方法研究[J].安陽工學(xué)院學(xué)報,2014,13(4):61-63.

[5]Chris Haseman.Android應(yīng)用開發(fā)[M].北京:人民郵電出版社,2013:172-178.

主站蜘蛛池模板: 日本免费a视频| 性69交片免费看| 日本午夜视频在线观看| 超清人妻系列无码专区| 毛片在线看网站| 婷婷久久综合九色综合88| 国产又色又刺激高潮免费看| 国产成人a在线观看视频| 久久性妇女精品免费| 国产一级α片| 日韩毛片免费| 精品人妻一区无码视频| 国产精品熟女亚洲AV麻豆| 亚洲成在人线av品善网好看| 97久久超碰极品视觉盛宴| 中国特黄美女一级视频| 精品视频第一页| 亚洲欧美另类视频| 男人的天堂久久精品激情| 性做久久久久久久免费看| 制服丝袜亚洲| 成人国产精品网站在线看| 久久人人97超碰人人澡爱香蕉| 色亚洲成人| 欧美色图第一页| 免费av一区二区三区在线| 亚洲色图欧美在线| 毛片在线播放网址| 天堂亚洲网| 无码粉嫩虎白一线天在线观看| 国产一级α片| 亚洲国产中文在线二区三区免| 麻豆a级片| 精品视频免费在线| 99re热精品视频国产免费| 欧美精品黑人粗大| 四虎免费视频网站| 国产91在线|中文| 欧美h在线观看| 久久亚洲国产最新网站| 亚洲人成网址| 亚洲 日韩 激情 无码 中出| 欧美一级夜夜爽www| 一区二区三区精品视频在线观看| 国产一级毛片yw| 亚洲黄色片免费看| 国模极品一区二区三区| 蜜桃视频一区| 欧美成人国产| 免费一级毛片在线观看| 毛片一级在线| 在线a视频免费观看| 91青青视频| 国产成人一区在线播放| av无码久久精品| 国产精品尤物铁牛tv| 久久这里只有精品2| 日韩成人免费网站| 91精品久久久久久无码人妻| 国产成人啪视频一区二区三区| 成人国产一区二区三区| 国产成人综合在线观看| 中文字幕啪啪| 色婷婷丁香| www成人国产在线观看网站| 国产h视频在线观看视频| 青青操视频免费观看| 亚洲精品少妇熟女| 青青草一区二区免费精品| 91在线日韩在线播放| 2020国产精品视频| а∨天堂一区中文字幕| 67194亚洲无码| 992Tv视频国产精品| 久久99国产综合精品1| 无码中文字幕乱码免费2| a级毛片免费在线观看| 在线视频精品一区| 欧美一级大片在线观看| 日韩精品无码免费专网站| 久久精品视频亚洲| 五月婷婷激情四射|