ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:17.16KB ,
资源ID:4593547      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4593547.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(Android使用Fragment创建动态UI.docx)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

Android使用Fragment创建动态UI.docx

1、Android使用Fragment创建动态UI 使用Fragment创建动态UI 使用Fragment创建动态UI   在Android中创建动态、多栏的UI,你需要将UI组件和Activity行为封装到模块中,以便在Activity中交换。你可以使用Fragment类创建这些模块,这种行为有点像一个可以自己定义布局和管理生命周期的嵌套Activity。   当一个Fragment指定它自身的布局时,它能和Activity内的其它Fragment配置成不同的组合以便为不同的屏幕大小修改你的布局结构(小屏幕一次可能只显示一个Fragment,大屏幕则可以显示两个或更多)。

2、  本课程展示了如何使用Fragment创建动态的用户体验以及为不同屏幕大小的设备优化App的用户体验,同时继续支持运行于低至Android1.6版本的设备。 创建Fragment   你可以认为Fragment是Activity的一个模块化部分,它有自己的生命周期,有自己的输入事件,并且你还可以在Activity运行时添加或移除它(有点像可以在不同的Activity中重用的"子Activity")。这节内容展示了如何使用支持库继承Fragment,使你的App可以和运行低至Android1.6的设备保持兼容。   注意:如果你决定了App要求的最小API级别为11以上,你可以使用框架内

3、建的Fragment类及相关的API,而不需要使用支持库。只要知道这节课的重点在于使用支持库API,它使用特定的包签名,并且某些API名称和平台包含的版本有点不同。   在你开始课程之前,你必须设置你的Android项目使用支持库。如果你之前没有使用支持库,按"安装支持库"文档所说的把你的项目设为使用v4库,你也可以使用v7 appcompat库以便在Activity中包含操作栏,v7兼容Android2.1(API级别7)并且也包含Fragment API。 创建Fragment类   要创建Fragment,从Fragment类继承,重写关键的生命周期方法以插入App的应用逻辑,就像

4、你在Activity类做的一样。   不同的是,创建Fragment时,你必须在onCreateView()回调方法中定义布局。事实上,这是运行Fragment所需要的唯一回调方法。下例是一个指定自己布局的简单Fragment: import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.ViewGroup; publicclassArticleFragmentextendsFragment{

5、 @Override publicView onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){ // 填充fragment的布局 return inflater.inflate(R.layout.article_view, container,false); } }   就像Activity一样,Fragment应该实现其它的生命周期回调方法,这样,当它在Activity中被添加或移除时,以及

6、Activity本身在生命周期状态中切换时,允许你管理Fragment的状态。例如,Activity的onPause()被调用时,Activity中的所有Fragment也会收到onPause()的调用。   更多有关Fragment生命周期和回调方法的信息,请参考Fragment开发者指南。 使用XML向Activity添加Fragment   Fragment是可重用的、模块化的UI组件,每个Fragment类的实例都必须关联一个父FragmentActivity。你可以在Activityr的布局XML文件中定义每一个Fragment来获取这种关联。   注意:FragmentAc

7、tivityj 是一个支持库提供的特殊的Activity,用来在低于API级别11的系统版本中处理Fragment。如果你支持的最低系统版本高于API级别11,你可以使用Activity。   这里是一个当设备屏幕为"大"(目录名使用了"large"修饰符)时,向Activity添加两个Fragment的布局文件的示例: res/layout-large/news_articles.xml

9、t="match_parent" />

10、out>   提示:更多有关为不同屏幕大小创建布局的内容,参看"支持不同屏幕大小"。   在Activity中应用布局: import android.os.Bundle; import android.support.v4.app.FragmentActivity; publicclassMainActivityextendsFragmentActivity{ @Override publicvoid onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState

11、); setContentView(R.layout.news_articles); } }   如果你使用了v7 appcompat库,Activity应该继承ActionBarActivity,这是FragmentActivity的一个子类(更多信息请参见"添加操作栏")。   注意:当你通过在布局XML文件中的声明Fragment的方式向Activity布局添加Fragment时,你不能在运行时移除Fragment。如果你打算在用户交互时交换Fragment,你必须在Activity首次启动时添加Fragment,这将在下一节演示。 构建灵活的UI

12、  当为较大范围的屏幕尺寸设计应用程序时,你可以基于屏幕所允许的空间,在不同的布局配置中重用Fragment以优化用户体验。   例如,在手机设备上为单面板用户界面一次只显示一个Fragment,相反,在有较宽屏幕尺寸的平板上可以并排设置Fragment来为用户显示更多信息。         FragmentManager类提供方法允许你在运行时为Activity添加、移除以及替换Fragment,从而创建动态用户体验。 在运行时向Activity添加Fragment   相比在布局文件中为Activity定义Fragment--就象上节课中演示的使用

13、>元素--你可以在Activity运行时添加Fragment,如果你打算在Activity生存期内改变Fragment,你必须这样做。   要执行添加或移除Fragment的事务,你必须使用FragmentManager创建一个FragTransaction,它提供了添加、移除、替换及执行其它Fragment事务的API。   如果你的Activity允许移除或替换Fragment,你应该在onCreate()方法中添加初始化Fragment的代码。   在处理Fragment(尤其是那些运行时添加的)时有一个重要的规则,在布局中必须有一个容器视图供这些Fragment布局驻留。   

14、下面的布局是一个替换在上节内容中出现的一次只显示一个Fragment的布局。为了用一个Fragment替换另一个,Activity包含一个FrameLayout做为Fragment的容器。   注意文件名和上节内容中的布局文件名相同,但是目录名中没有"large"修饰符,因此这个布局用于设备屏幕比"large"小,不能同时填充两个Fragment的情况中。   res/layout/news_articles.xml

15、out_width="match_parent" android:layout_height="match_parent"/>   在Activity中插入代码,调用支持库API的getSupportFragmentManager()方法获得FragmentManager,然后调用beginTransaction()创建FragmentTransaction,调用add()方法添加Fragment。   你可以使用同一个FragmentTransaction执行多个Fragment事务,当你准备好要改变时,你必须调用commit()方法。   下面是如何向Activity中添加

16、Fragment的例子: import android.os.Bundle; import android.support.v4.app.FragmentActivity; publicclassMainActivityextendsFragmentActivity{ @Override publicvoid onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.news_articles)

17、 // 检查Activity正在使用的包含Fragment容器FrameLayout的布局版本 if(findViewById(R.id.fragment_container)!=null){ //如果我们是从较早的状态中恢复 //我们不需要做任何事情,直接返回 //否则,我们可能会覆盖掉已经存在的Fragment if(savedInstanceState !=null){ return;

18、 } //创建放在Activity中的新Fragment HeadlinesFragment firstFragment =newHeadlinesFragment(); //在这个例子中,Activity是被Intent对象的特殊指令启动的,    //把Intent的extras集合传递给Fragment做为参数 firstFragment.setArguments(getIntent().getExtras());

19、 // 把Fragment添加到容器FrameLayout中 getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, firstFragment).commit(); } } }   因为Fragment在运行时添加到FrameLayout容器中(替换在Activity布局文件中用元素定义的),Activity可以移除它,并用另一个Fragment替

20、换它。 用一个Fragment替换另一个   替换Fragment的过程就是简单的添加一个Fragment,只不过是用replace()方法代替add()方法。   请记住,当执行Fragment事务,如替换或删除Fragment时,它通常允许用户向后导航并"撤销"改变。要允许用户通过Fragment事务向后导航,你必须在提交FragmentTransaction之前调用addToBackStack()方法。   注意:当你移除或替换一个Fragment并把事务添加到返回栈时,被移除的Fragment处于停止状态(不是被销毁)。如果用户向后导航以恢复Fragment,它会重新启动。如果

21、你没有向返回栈中添加事务,那么移除或替换Fragment时,它被销毁。   下面是替换Fragment的例子: // 创建一个Fragment并给它指定一个要显示的文章做为参数 ArticleFragment newFragment =newArticleFragment(); Bundle args =newBundle(); args.putInt(ArticleFragment.ARG_POSITION, position); newFragment.setArguments(args); FragmentTransaction transaction = getSup

22、portFragmentManager().beginTransaction(); // 用这个Fragment替换Fragment容器中的内容 //向返回栈中添加事务以便用户可以向后导航 transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); //提交事务 mit();   addToBackStack()方法有一个可选参数来为事务指定唯一名称,不需要这个名称,除非你打算用FragmentManager.BackStackEntry API来

23、执行Fragment的高级操作。 和其它Fragment通信   为了重用Fragment UI组件,你应该定义一个完全独立的、模块化的组件,它定义了自己的布局和行为。一旦你定义了这些可重用的Fragment,你可以把它们和Activity结合起来,并关连应用程序逻辑以实现整体组合UI。   通常你会希望一个Fragment能和其它Fragment通信,比如基于用户事件改变内容。所有Fragment到Fragment的通信都是通过相关的Activity,两个Fragment之间应该永远不要直接通信。 定义接口   要允许一个Fragment和它所在的Activity通信,你可以在Fr

24、agment类中定义一个接口,在Activity中实现它。Fragment会在onAttach()生命周期回调方法中捕获接口的实现,并能调用接口方法和Activity通信。   下面是Fragment和Activity通信的例子: publicclassHeadlinesFragmentextendsListFragment{ OnHeadlineSelectedListener mCallback; //容器Activity必须实现这个接口 publicinterfaceOnHeadlineSelectedListener{ publi

25、cvoid onArticleSelected(int position); } @Override publicvoid onAttach(Activity activity){ super.onAttach(activity); //确保容器Activity实现了回调接口, //否则,它会抛出异常 try{ mCallback =(OnHeadlineSelectedListener) activity; }catch(C

26、lassCastException e){ thrownewClassCastException(activity.toString() +" must implement OnHeadlineSelectedListener"); } } ... }   现在Fragment可以使用OnHeadlineSelectedListener接口的实例mCallback调用onArticleSelected()方法把消息发送给Activity。 例如,当用户点击列表项时,Fra

27、gment中的方法使用回调接品把事件发送到父Activity: @Override publicvoid onListItemClick(ListView l,View v,int position,long id){ // 把事件发送到父Activity mCallback.onArticleSelected(position); } 实现接口   为了从Fragment中接收事件回调,父Activity必须实现在Fragment类中定义的接口。   下面是一个实现上例中接口的例子: publicstaticclass

28、MainActivityextendsActivity implementsHeadlinesFragment.OnHeadlineSelectedListener{ ... publicvoid onArticleSelected(int position){ //当用户选择了HeadlinesFragment的标题时, //完成显示文章的代码 } } 发送消息到Fragment   父Activity可以把消息发给通过findFragmentById()方法捕获的Fragment实例,然后

29、直接调用Fragment的公开方法。   例如,假设上面的Activity包含另一个Fragment,用来显示通过上面的回调方法获得的列表项数据。在该例中,Activity可以把在回调方法中收到的信息传递给另一个Fragment并显示它。 publicstaticclassMainActivityextendsActivity implementsHeadlinesFragment.OnHeadlineSelectedListener{ ... publicvoid onArticleSelected(int position){

30、 //当用户选择了HeadlinesFragment的标题时, //完成显示文章的代码 ArticleFragment articleFrag =(ArticleFragment) getSupportFragmentManager().findFragmentById(R.id.article_fragment); if(articleFrag !=null){ //如果显示文章的Fragment可用,我们处于双栏布局中... //调用Art

31、icleFragment中的方法,更新它的内容 articleFrag.updateArticleView(position); }else{ // 否则,我们处于单栏布局中,需要交换Fragment... //创建Fragment并把所选择的文章做为它的参数 ArticleFragment newFragment =newArticleFragment(); Bundle args =newBundle(); arg

32、s.putInt(ArticleFragment.ARG_POSITION, position); newFragment.setArguments(args); FragmentTransaction transaction =         getSupportFragmentManager().beginTransaction(); // 用这个Fragment替换Fragment容器中的内容 //并在返回栈中添加事务,以便用户可以向后导航 transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); //提交事务 mit(); } } }

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服