




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AndroidFragments详名田使用Fragments诞生初衷自从 Android3.0 中引入 fragments 的概念,根据词海的翻译可以译为:碎片、片段。其上的是为了解决不同屏幕分辩率的动态和灵活 UI 设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的 UI 组件,而多出来的空间存放 UI 使其会产生更多的交互,从而诞生了 fragments。fragments 的设计不需要你来亲自管理 viewhierarchy 的复杂变化,通过将 Activity 的布局分散到 frament 中,可以在运行时修改 activity 的外观,并且由 activity
2、 管理的 backstack 中保存些变化。Fragments设计理念在设计应用时特别是 Android 应用,有众多的分辨率要去适应,而 fragments 可以让你在屏幕不同的屏幕上动态管理 UI。例如:通讯应用程序(QQ),用户列表可以在左边,消息窗口在右边的设计。而在手机屏幕用户列表填充屏幕当点击某一用户时,则弹出对话窗口的设计,如下图:Fragments的生命周期每一个 fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件。对应生命周期可参考下图:TabletActivityAcontainsFra5maritAArHandsetSeleclinganlemAc
3、tivityAActivityBconiainsFraFrAgm&nt随addedThefragmentreturnstothelayoutfromtnabackslackFragmentIsdestroyed其中大多数程序必须使用 Fragments 必须实现的三个回调方法分别为:onCreate系统创建 Fragments 时调用,可做执行初始化工作或者当程序被暂停或停止时用来恢复状态,跟 Activity 中的 onCreate 相当。FragmentI导activeUsernavigatesbacfovardorfragmentisrernaved/replacedTiwfra
4、gmentisaddedioih&oackstack,thenreniQved/replacedonCreateView用于首次绘制用户界面的回调方法,必须返回要创建的 Fragments 视图 UI。假如你不希望提供 Fragments 用户界面则可以返回 NULL。onPause当用户离开这个 Fragments 的时候调用,这时你要提交任何应该持久的变化,因为用户可能不会回来。更多的事件可以参考上图的生命周期关系图。Fragments的类另U系统内置了三种 Fragments,这三种 Fragments 分别有不同的应用场景分别为:DialogFragment对话框式的 Frag
5、ments,可以将一个 fragments 对话框并到 activity 管理的 fragmentsbackstack 中,允许用户回到一个前曾摒弃 fragments.ListFragments类似于 ListActivity 的效果,并且还提供了 ListActivity 类似的 onListItemCLick 和 setListAdapter 等功能。PreferenceFragments类似于 PreferenceActivity.可以创建类似 IPAD 的设置界面。Fragments的详细使用首先先来看一张 DEMO 效果图:左边点击时,右边的字符会与左边选中的项的字符相同。与 IP
6、AD 上的设置界面很相似,这一点是否借鉴了 ipad 上的 UI 呢?相就的 XML 文件:StorageManaqeonEventSocketLinstener-startListeMountService/=V,=stcNetlinkListener-sNativeDaemonConnectormount/unMountVolumeManaoerNetlinkManagerDirectA)lumeKernelVolume主界面代码(己做注释):电packagecom.xuzhi.fragment;importandroid.app.Activity;importandroid.app.Al
7、ertDialog;importandroid.app.Fragment;importandroid.app.FragmentTransaction;importandroid.app.ListFragment;importandroid.os.Bundle;importandroid.util.TypedValue;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.ArrayAdapter;importandroid.widge
8、t.ListView;importandroid.widget.ScrollView;importandroid.widget.TextView;publicclassFragmentDemoActivityextendsActivitypublicstaticString口array=text1,text2,text3,text4,text5,text6,text7,text8;/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(s
9、avedInstanceState);setContentView(R.layout.main);publicstaticclassTitlesFragmentextendsListFragmentbooleanmDualPane;=match_parentintmCurCheckPosition=0;OverridepublicvoidonCreate(BundlesavedInstanceState)/TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);System.out.println(Fragment-onCr
10、eate);OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState)/TODOAuto-generatedmethodstubSystem.out.println(Fragment-onCreateView);returnsuper.onCreateView(inflater,container,savedInstanceState);OverridepublicvoidonPause()/TODOAuto-generatedmethodstubsuper
11、.onPause();System.out.println(Fragment-onPause);OverridepublicvoidonStop()/TODOAuto-generatedmethodstubsuper.onStop();System.out.println(Fragment-onStop);OverridepublicvoidonAttach(Activityactivity)/TODOAuto-generatedmethodstubsuper.onAttach(activity);System.out.println(Fragment-onAttach);Overridepu
12、blicvoidonStart()/TODOAuto-generatedmethodstubsuper.onStart();System.out.println(Fragment-onStart);OverridepublicvoidonResume()/TODOAuto-generatedmethodstubsuper.onResume();System.out.println(Fragment-onResume);OverridepublicvoidonDestroy()/TODOAuto-generatedmethodstubsuper.onDestroy();System.out.pr
13、intln(Fragment-onDestroy);OverridepublicvoidonActivityCreated(BundlesavedInstanceState)/TODOAuto-generatedmethodstubsuper.onActivityCreated(savedInstanceState);System.out.println(Fragment-onActivityCreted);setListAdapter(newArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,array);Viewde
14、tailsFrame=getActivity().findViewById(R.id.details);mDualPane=detailsFrame!=null&detailsFrame.getVisibility()=View.VISIBLE;if(savedInstanceState!=null)mCurCheckPosition=savedInstanceState.getInt(curChoice,0);/从保存的状态中取出数据if(mDualPane)getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);showDe
15、tails(mCurCheckPosition);OverridepublicvoidonSaveInstanceState(BundleoutState)/TODOAuto-generatedmethodstubsuper.onSaveInstanceState(outState);outState.putInt(curChoice,mCurCheckPosition);)OverridepublicvoidonListItemClick(ListViewl,Viewv,intposition,longid)/TODOAuto-generatedmethodstubsuper.onListI
16、temClick(l,v,position,id);showDetails(position);)voidshowDetails(intindex)mCurCheckPosition=index;if(mDualPane)getListView().setItemChecked(index,true);DetailsFragmentdetails=(DetailsFragment)getFragmentManager().findFragmentById(R.id.details);if(details=null|details.getShownIndex()!=index)details=D
17、etailsFragment.newInstance(mCurCheckPosition);/得到一个 fragment 事务(类似 sqlite 的操作)FragmentTransactionft=getFragmentManager().beginTransaction();ft.replace(R.id.details,details);/将得到的 fragment 替换当前的 viewGroup 内容,add 则不替换会依次累加ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);/设置动画效果 mit();/提交)el
18、senewAlertDialog.Builder(getActivity().setTitle(android.R.string.dialog_alert_title).setMessage(arrayindex).setPositiveButton(android.R.string.ok,null).show();保存当前的下标作为界面的一部分,为 fragment 提供一个 layoutauthorterrypublicstaticclassDetailsFragmentpublicstaticDetailsFragmentnewInstance(DetailsFragmentdetail
19、s=newDetailsFragment();Bundleargs=newBundle();args.putInt(index,index);details.setArguments(args);getArguments().getInt(index,0);OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontaineBundlesavedInstanceState)/TODOAuto-generatedmethodstub/*/r,if(container=null)returnnullScrollViewscr
20、oller=newScrollView(getActivity();TextViewtext=newTextView(getActivity();intpadding=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,4,getActivity().getResources().getDisplayMetrics();text.setPadding(padding,padding,padding,padding);scroller.addView(text);text.setText(arraygetShownIndex();returnscroller;extendsFragmentintindex)returndetails;publicintgetShownIndex()return如果你想在 Fragment 里面创建 menu,则必须在 onCreate 的时候设置让它可以存在optionMenu 才可以创建,代码为:publicstaticclassDetailsFragmentexten
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-湖南-湖南工程测量员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖南-湖南土建施工人员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖北-湖北动物检疫员一级(高级技师)历年参考题库典型考点含答案解析
- 农村教育资源配置优化与教育质量监控研究报告
- 2025年事业单位工勤技能-海南-海南环境监测工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-海南-海南无损探伤工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-浙江-浙江电工五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河南-河南水文勘测工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-河南-河南印刷工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-河北-河北地图绘制员五级(初级工)历年参考题库含答案解析
- (2025)工会知识竞赛题库含参考答案
- 企业员工激励奖励制度完整方案
- 2025医学基础知识试题(附答案)
- 2025年江苏省高考政治试题与参考答案
- 客户项目管理办法
- 西藏建筑业用工合同范本
- 软件项目需求调研报告样例
- WJ30059-2023军用爆炸品设计安全技术规程
- 工程甲方指令单
- DB15T 385-2020 行业用水定额
- 医疗器械储存、运输应急预案
评论
0/150
提交评论