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

用Android Fragment技術實現多級選項列表

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

黃立明+江有福+陸雅男

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

關鍵詞:安卓;碎片;用戶界面;多級選項列表

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

0 引言

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

圖1是Fragment和Activity生命周期的對比圖。Fragment作為Activity的一部分,擁有一個與其相關的視圖層次結構以及與Activity非常相似的生命周期。

1 Fragment初始化

Fragment并非Activity的子類,Fragment直接繼承Object,而Activity直接繼承ContextThemeWrapper。

2 Fragment的生命周期

2.1 onAttach()

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

2.2 onCreate()

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

2.3 onCreateView()

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

2.4 onActivityCreated()

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

2.5 其他

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

3 創建Fragment

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

3.1 加載布局式

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

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

}

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

3.2 Java代碼式

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

//構建Fragment的java代碼

}

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

4 顯示Fragment

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

4.1 靜態載入xml

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

4.2 動態管理

該方式需要借助Android系統控制碎片的工具FragmentManager來實現的。需要注意的是,xml布局中使用標記靜態聲明的視圖容器是不能被替換的。

實現步驟如下:

(1)先調用指定類的初始化函數實例化Fragment。

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

(3)然后設置Fragment的轉場動畫。

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

(5)最后提交事務。

對應代碼如下圖所示。

5 制作多級選項列表

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

5.1 Activity的xml布局

5.2 一級列表

主要代碼如圖3所示。

代碼分析:

一級列表類TitleFragment用于顯示一級列表,是以靜態形式首先被加載,所以不需要初始化,即不需要顯式的構造函數。在Activity調用setContentView()方法設置視圖時,Fragment通過xml文件中〈fragment〉標記映射對應的類。

第3~10行:在onCreate()方法中準備列表的數據;

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

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

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

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

實現效果如圖4所示。

5.3 二級列表

5.3.1 主要代碼如圖5所示。

代碼分析:

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

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

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

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

第14行:給listview設定選擇模式;

第16行:返回視圖listview;

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

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

實現效果如圖6所示。

5.4 三級列表

三級列表類DetailFragment2的實現和二級列表類DetailFragment1的實現類似。

6 最終效果

7 總結

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

基于Fragment技術的應用程序設計體現了如下的幾大特性。

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

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

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

參考文獻:

[1]王云林.Android應用中跨版本集成新特性的研究與實現[D].上海:東華大學計算機系,2013.

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

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

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

[5]Chris Haseman.Android應用開發[M].北京:人民郵電出版社,2013:172-178.

主站蜘蛛池模板: 亚洲黄色激情网站| 无码aⅴ精品一区二区三区| 99精品在线视频观看| 国产精品亚洲综合久久小说| 天天综合天天综合| 99精品影院| 国产一区二区三区视频| 亚洲精品国产综合99| 2021国产在线视频| 在线观看国产精品日本不卡网| 无码AV高清毛片中国一级毛片| 免费xxxxx在线观看网站| 91麻豆精品视频| 亚洲欧美日韩久久精品| 亚洲欧美成人在线视频| 污污网站在线观看| 久久夜夜视频| 国产在线精品99一区不卡| AV不卡在线永久免费观看| 日韩在线永久免费播放| 97无码免费人妻超级碰碰碰| 国产伦精品一区二区三区视频优播| 中文成人无码国产亚洲| 中文国产成人久久精品小说| 免费国产一级 片内射老| 国产va免费精品观看| 2020极品精品国产| 欧美国产精品不卡在线观看| 欧洲成人在线观看| 国产亚洲精品yxsp| 亚洲av无码人妻| 她的性爱视频| a级免费视频| 日本午夜精品一本在线观看| 亚洲国产中文欧美在线人成大黄瓜| 中文字幕波多野不卡一区| 欧美午夜在线观看| 国产一区二区三区在线无码| 中文字幕啪啪| 人妻精品久久无码区| 小说区 亚洲 自拍 另类| 99热这里只有精品5| 国产欧美专区在线观看| 免费黄色国产视频| 蜜桃视频一区二区| 91美女在线| 91精品国产自产在线老师啪l| 97综合久久| 国产成人高清亚洲一区久久| 婷婷色狠狠干| 999福利激情视频| 成人精品午夜福利在线播放| 亚洲高清无码久久久| 天堂av高清一区二区三区| 成人精品免费视频| 在线视频亚洲色图| а∨天堂一区中文字幕| 欧美精品在线免费| 亚洲日韩精品伊甸| 国产精女同一区二区三区久| 日韩无码视频播放| 四虎亚洲精品| 日韩欧美在线观看| 久久综合亚洲色一区二区三区| 伊人成人在线视频| 国产午夜一级淫片| 91免费在线看| 日韩区欧美区| 午夜不卡视频| 亚洲国产中文综合专区在| www亚洲天堂| 9cao视频精品| 97se综合| www亚洲天堂| 国产va视频| 在线日韩日本国产亚洲| 中文字幕亚洲电影| 亚洲精品无码人妻无码| 91亚洲国产视频| 国产美女自慰在线观看| 国产日韩欧美在线视频免费观看| 国产地址二永久伊甸园|