• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

      2015-12-09 20:47:09黃立明江有福陸雅男
      教育教學論壇 2015年15期
      關鍵詞:用戶界面安卓

      黃立明+江有福+陸雅男

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

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

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

      0 引言

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

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

      1 Fragment初始化

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

      2 Fragment的生命周期

      2.1 onAttach()

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

      2.2 onCreate()

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

      2.3 onCreateView()

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

      2.4 onActivityCreated()

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

      2.5 其他

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

      3 創(chuàng)建Fragment

      創(chuàng)建Fragment首先需要創(chuàng)建擴展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調用inflate()方法加載xml布局文件來創(chuàng)建Fragment。示例代碼中加載的是content.xml布局文件。

      3.2 Java代碼式

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

      //構建Fragment的java代碼

      }

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

      4 顯示Fragment

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

      4.1 靜態(tài)載入xml

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

      4.2 動態(tài)管理

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

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

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

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

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

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

      (5)最后提交事務。

      對應代碼如下圖所示。

      5 制作多級選項列表

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

      5.1 Activity的xml布局

      5.2 一級列表

      主要代碼如圖3所示。

      代碼分析:

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

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

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

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

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

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

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

      5.3 二級列表

      5.3.1 主要代碼如圖5所示。

      代碼分析:

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

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

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

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

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

      第16行:返回視圖listview;

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

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

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

      5.4 三級列表

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

      6 最終效果

      7 總結

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

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

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

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

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

      參考文獻:

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

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

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

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

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

      猜你喜歡
      用戶界面安卓
      自然用戶界面在智能家居系統(tǒng)中的應用路徑創(chuàng)新研究:生成式人工智能技術的調節(jié)作用
      包裝工程(2023年16期)2023-08-25 11:40:58
      iPhone不卡的秘密曝光:安卓也能享受
      消費電子(2022年6期)2022-08-25 09:44:40
      基于CiteSpace的國外用戶界面體驗圖譜量化分析
      MIPS安卓平臺上ARM二進制翻譯系統(tǒng)
      高技術通訊(2021年1期)2021-03-29 02:29:28
      文物表情包
      物聯(lián)網用戶界面如何工作
      UI用戶界面色彩設計研究
      流行色(2017年12期)2017-10-26 03:08:44
      一種基于安卓系統(tǒng)的手機側抓包分析方法
      基于B/S的跨平臺用戶界面可配置算法研究
      安卓L未至安卓M來了!安卓首泄漏M系統(tǒng)
      汕尾市| 达拉特旗| 舞阳县| 沈丘县| 永吉县| 东阿县| 古丈县| 安福县| 伊宁市| 前郭尔| 镇赉县| 阜南县| 嘉兴市| 平度市| 万载县| 平遥县| 杭锦旗| 商南县| 新田县| 长岭县| 拉孜县| 库伦旗| 南安市| 海南省| 洪湖市| 齐齐哈尔市| 仁寿县| 平乡县| 会理县| 临朐县| 承德县| 龙海市| 八宿县| 宁明县| 莎车县| 四川省| 内黄县| 武安市| 灌南县| 蕲春县| 白山市|