




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android Fragments 详细使用 Fragments 诞生初衷 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片、片段。其上的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity 管理的back stack 中保存些变化。 Fragments 设计理念 在设计应用时特别是Android 应用 ,有众多的分辨率要去适应,而fragments 可以让你在屏幕不同的屏幕上动态管理UI。例如:通讯应用程序(QQ),用户列表可以在左边,消息窗口在右边的设计。而在手机屏幕用户列表填充屏幕当点击某一用户时,则弹出对话窗口的设计,如下图:Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件。 对应生命周期可参考下图:其中大多数程序必须使用Fragments 必须实现的三个回调方法分别为:onCreate 系统创建Fragments 时调用,可做执行初始化工作或者当程序被暂停或停止时用来恢复状态,跟Activity 中的onCreate相当。onCreateView 用于首次绘制用户界面的回调方法,必须返回要创建的Fragments 视图UI。假如你不希望提供Fragments 用户界面则可以返回NULL。onPause 当用户离开这个Fragments 的时候调用,这时你要提交任何应该持久的变化,因为用户可能不会回来。更多的事件可以参考上图的生命周期关系图。Fragments 的类别 系统内置了三种Fragments ,这三种Fragments 分别有不同的应用场景分别为:DialogFragment对话框式的Fragments,可以将一个fragments 对话框并到activity 管理的fragments back stack 中,允许用户回到一个前曾摒弃fragments.ListFragments 类似于ListActivity 的效果,并且还提供了ListActivity 类似的onListItemCLick和setListAdapter等功能。PreferenceFragments 类似于PreferenceActivity .可以创建类似IPAD的设置界面。Fragments 的详细使用 首先先来看一张DEMO 效果图: 左边点击时,右边的字符会与左边选中的项的字符相同。与IPAD上的设置界面很相似,这一点是否借鉴了ipad 上的UI呢?相就的XML文件: 主界面代码(己做注释):packagecom.xuzhi.fragment;importandroid.app.Activity;importandroid.app.AlertDialog;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.widget.ListView;importandroid.widget.ScrollView;importandroid.widget.TextView;publicclassFragmentDemoActivityextendsActivitypublicstaticStringarray=text1,text2,text3,text4,text5,text6,text7,text8;/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);publicstaticclassTitlesFragmentextendsListFragmentbooleanmDualPane;intmCurCheckPosition=0;OverridepublicvoidonCreate(BundlesavedInstanceState)/TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);System.out.println(Fragment-onCreate);OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState)/TODOAuto-generatedmethodstubSystem.out.println(Fragment-onCreateView);returnsuper.onCreateView(inflater,container,savedInstanceState);OverridepublicvoidonPause()/TODOAuto-generatedmethodstubsuper.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);OverridepublicvoidonStart()/TODOAuto-generatedmethodstubsuper.onStart();System.out.println(Fragment-onStart);OverridepublicvoidonResume()/TODOAuto-generatedmethodstubsuper.onResume();System.out.println(Fragment-onResume);OverridepublicvoidonDestroy()/TODOAuto-generatedmethodstubsuper.onDestroy();System.out.println(Fragment-onDestroy);OverridepublicvoidonActivityCreated(BundlesavedInstanceState)/TODOAuto-generatedmethodstubsuper.onActivityCreated(savedInstanceState);System.out.println(Fragment-onActivityCreted);setListAdapter(newArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,array);ViewdetailsFrame=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);showDetails(mCurCheckPosition);OverridepublicvoidonSaveInstanceState(BundleoutState)/TODOAuto-generatedmethodstubsuper.onSaveInstanceState(outState);outState.putInt(curChoice,mCurCheckPosition);/保存当前的下标OverridepublicvoidonListItemClick(ListViewl,Viewv,intposition,longid)/TODOAuto-generatedmethodstubsuper.onListItemClick(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=DetailsFragment.newInstance(mCurCheckPosition);/得到一个fragment事务(类似sqlite的操作)FragmentTransactionft=getFragmentManager().beginTransaction();ft.replace(R.id.details,details);/将得到的fragment替换当前的viewGroup内容,add则不替换会依次累加ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);/设置动画效果mit();/提交elsenewAlertDialog.Builder(getActivity().setTitle(android.R.string.dialog_alert_title).setMessage(arrayindex).setPositiveButton(android.R.string.ok,null).show();/*作为界面的一部分,为fragment提供一个layout*authorterry*/publicstaticclassDetailsFragmentextendsFragmentpublicstaticDetailsFragmentnewInstance(intindex)DetailsFragmentdetails=newDetailsFragment();Bundleargs=newBundle();args.putInt(index,index);details.setArguments(args);returndetails;publicintgetShownIndex()returngetArguments().getInt(index,0);OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState)/TODOAuto-generatedmethodstubif(container=null)returnnull;ScrollViewscroller=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; 注意:1. 如果你想在Fragment 里面创建menu,则必须在onCreate的时候设置让它可以存在optionMenu才可以创建,代码为:publicstaticclassDetailsFragmentextendsFragmentOverridepublicvoidonCreate
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年老年人健康管理考核试题及答案
- 2025年高年龄测试题及答案
- 慢性膀胱炎合并膀胱黏膜白斑护理查房
- 阿图什市2025-2026学年八年级上学期语文期中模拟试卷
- 安徽省2025年高二学业水平合格性考试数学试卷及答案
- 2025 年小升初福州市初一新生分班考试英语试卷(带答案解析)-(外研版)
- 湖北省2025年一级建筑师建筑材料与构造辅导:喷射混凝土试题
- 山东省日照市莒县第三中学2024-2025学年七年级下学期第三次月考生物试题(含答案)
- 北师大版五年级上册数学第五单元 分数的意义 检测卷(无答案)
- 购买公司的合同范本
- 2025-2030中国气雾剂行业发展现状及发展趋势与投资风险分析
- 2025年客运车辆驾驶员(技师)职业技能鉴定考试题库(含答案)
- 2025至2030年中国窗户胶行业投资前景及策略咨询研究报告
- 江苏遴选笔试真题及答案
- 有限空间安全管理制度与台账
- 高压电缆头制作培训教材
- 2025至2030中国航空发动机行业发展动态及投资趋势研究报告
- 国旗法课件教学课件
- 食管内镜支架植入护理配合
- 老年人防诈骗课件
- 《煤矿重大事故隐患判定标准》
评论
0/150
提交评论