当前位置: 首页 > news >正文

刷粉网站推广免费桂林北站官网

刷粉网站推广免费,桂林北站官网,linux安装WordPress80端口,如何替换网站上的动画什么是Fragment#xff1a; Android是在Android 3.0 (API level 11)开始引入Fragment的。 可以把Fragment想成Activity中的模块#xff0c;这个模块有自己的布局#xff0c;有自己的生命周期#xff0c;单独处理自己的输入#xff0c;在Activity运行的时候可以加载或者移除…什么是Fragment Android是在Android 3.0 (API level 11)开始引入Fragment的。 可以把Fragment想成Activity中的模块这个模块有自己的布局有自己的生命周期单独处理自己的输入在Activity运行的时候可以加载或者移除Fragment模块。 可以把Fragment设计成可以在多个Activity中复用的模块。 当开发的应用程序同时适用于平板电脑和手机时可以利用Fragment实现灵活的布局改善用户体验。     Fragment的意义  Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计。平板电脑的屏幕要比手机的大得多,有更多的空间来放更多的UI组件,并且这些组件之间会产生更多的交互。Fragment允许这样的一种设计,而不需要你亲自来管理 viewhierarchy的复杂变化。 通过将activity的布局分散到fragment中, 你可以在运行时修改activity的外观,并在由activity管理的back stack中保存那些变化.   例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章--2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输入事件。 因此, 取代使用一个activity来选择一篇文章而另一个activity来阅读文章的方式,用户可以在同一个activity中选择一篇文章并且阅读, 如图所示:   fragment在你的应用中应当是一个模块化和可重用的组件.即,因为fragment定义了它自己的布局, 以及通过使用它自己的生命周期回调方法定义了它自己的行为,你可以将fragment包含到多个activity中. 这点特别重要, 因为这允许你将你的用户体验适配到不同的屏幕尺寸.举个例子,你可能会仅当在屏幕尺寸足够大时,在一个activity中包含多个fragment,并且,当不属于这种情况时,会启动另一个单独的,使用不同fragment的activity.继续之前那个新闻的例子 -- 当运行在一个特别大的屏幕时(例如平板电脑),应用可以在Activity A中嵌入2个fragment。然而,在一个正常尺寸的屏幕(例如手机)上,没有足够的空间同时供2个fragment用, 因此, Activity A会仅包含文章列表的fragment, 而当用户选择一篇文章时, 它会启动ActivityB,它包含阅读文章的fragment.因此, 应用可以同时支持上图中的2种设计模式。     Fragment的生命周期 因为Fragment必须嵌入在Acitivity中使用所以Fragment的生命周期和它所在的Activity是密切相关的。 如果Activity是暂停状态其中所有的Fragment都是暂停状态如果Activity是stopped状态这个Activity中所有的Fragment都不能被启动如果Activity被销毁那么它其中的所有Fragment都会被销毁。对Activity不熟悉的话请看另一篇文章《Android四大组件之Activity》 但是当Activity在活动状态可以独立控制Fragment的状态比如加上或者移除Fragment。 当这样进行fragment transaction转换的时候可以把fragment放入Activity的back stack中这样用户就可以进行返回操作。     Fragment的使用 创建Fragment 要创建一个fragment, 必须创建一个 Fragment 的子类 (或者继承自一个已存在的它的子类DialogFragment,ListFragment,PreferenceFragment,WebViewFragment). Fragment类的代码看起来很像 Activity 。它包含了和activity类似的回调方法, 例如onCreate()、 onStart()、onPause()以及 onStop()。事实上, 如果你准备将一个现成的Android应用转换到使用fragment,可能只需简单的将代码从你的activity的回调方法分别移动到你的fragment的回调方法即可。       通常, 应当至少实现如下的生命周期方法: onCreate()当创建fragment时, 系统调用该方法. 在实现代码中,应当初始化想要在fragment中保持的必要组件, 当fragment被暂停或者停止后可以恢复.onCreateView()fragment第一次绘制它的用户界面的时候, 系统会调用此方法. 为了绘制fragment的UI,此方法必须返回一个View, 这个view是你的fragment布局的根view. 如果fragment不提供UI, 可以返回null.onPause()用户将要离开fragment时,系统调用这个方法作为第一个指示(然而它不总是意味着fragment将被销毁.) 在当前用户会话结束之前,通常应当在这里提交任何应该持久化的变化(因为用户有可能不会返回).   大多数应用应当为每一个fragment实现至少这3个方法,但是还有一些其他回调方法你也应当用来去处理fragment生命周期的各种阶段.全部的生命周期回调方法将会在后面章节 Handlingthe Fragment Lifecycle 中讨论.      除了继承基类 Fragment , 还有一些子类你可能会继承:   DialogFragment显示一个浮动的对话框.  用这个类来创建一个对话框,是使用在Activity类的对话框工具方法之外的一个好的选择,因为你可以将一个fragment对话框合并到activity管理的fragment back stack中,允许用户返回到一个之前曾被摒弃的fragment.ListFragment显示一个由一个adapter(例如 SimpleCursorAdapter)管理的项目的列表, 类似于ListActivity.它提供一些方法来管理一个list view, 例如 onListItemClick()回调来处理点击事件.PreferenceFragment显示一个 Preference对象的层次结构的列表, 类似于PreferenceActivity. 这在为你的应用创建一个设置activity时有用处.  实现Fragment的UI   提供Fragment的UI必须实现onCreateView()方法。   假设Fragment的布局设置写在example_fragment.xml资源文件中那么onCreateView()方法可以如下写 public static class ExampleFragment extends Fragment {Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.example_fragment, container, false);} } onCreateView()中container参数代表该Fragment在Activity中的父控件savedInstanceState提供了上一个实例的数据。   inflate()方法的三个参数   第一个是resource ID指明了当前的Fragment对应的资源文件   第二个参数是父容器控件   第三个布尔值参数表明是否连接该布局和其父容器控件在这里的情况设置为false因为系统已经插入了这个布局到父控件设置为true将会产生多余的一个View Group。   把Fragment加入Activity     当Fragment被加入Activity中时它会处在对应的View Group中。     Fragment有两种加载方式一种是在Activity的layout中使用标签fragment声明另一种方法是在代码中把它加入到一个指定的ViewGroup中。     另外Fragment它可以并不是Activity布局中的任何一部分它可以是一个不可见的部分。这部分内容先略过。       加载方式1通过Activity的布局文件将Fragment加入Activity     在Activity的布局文件中将Fragment作为一个子标签加入即可。     如 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:orientationhorizontalandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentfragment android:namecom.example.news.ArticleListFragmentandroid:idid/listandroid:layout_weight1android:layout_width0dpandroid:layout_heightmatch_parent /fragment android:namecom.example.news.ArticleReaderFragmentandroid:idid/viewerandroid:layout_weight2android:layout_width0dpandroid:layout_heightmatch_parent / /LinearLayout 其中android:name属性填上你自己创建的fragment的完整类名。   当系统创建这个Activity的布局文件时系统会实例化每一个fragment并且调用它们的onCreateView()方法来获得相应fragment的布局并将返回值插入fragment标签所在的地方。   有三种方法为Fragment提供ID   android:id属性唯一的id   android:tag属性唯一的字符串   如果上面两个都没提供系统使用容器view的ID。   加载方式2通过编程的方式将Fragment加入到一个ViewGroup中   当Activity处于Running状态下的时候可以在Activity的布局中动态地加入Fragment只需要指定加入这个Fragment的父View Group即可。   首先需要一个FragmentTransaction实例  FragmentManager fragmentManager getFragmentManager()FragmentTransaction fragmentTransaction fragmentManager.beginTransaction();   注如果import android.support.v4.app.FragmentManager;那么使用的是FragmentManager fragmentManager getSupportFragmentManager();   之后用add()方法加上Fragment的对象 ExampleFragment fragment new ExampleFragment();fragmentTransaction.add(R.id.fragment_container, fragment);fragmentTransaction.commit();   其中第一个参数是这个fragment的容器即父控件组。   最后需要调用commit()方法使得FragmentTransaction实例的改变生效。   Fragment对menu菜单的操作 android4.0之后引入了fragment的概念它的生命周期函数和activity几乎一样。对菜单的操作也是通过onCreateOptionMenu实现的。 fragment可以通过实现 onCreateOptionMenu() 提供菜单项给activity的选项菜单。为了使这个方法接收调用,无论如何, 你必须在 onCreate() 期间调用 setHasOptionsMenu() 来指出fragment愿意添加item到选项菜单(否则, fragment将接收不到对 onCreateOptionsMenu()的调用) 随后从fragment添加到Option菜单的任何项,都会被 追加到现有菜单项的后面.当一个菜单项被选择, fragment也会接收到 对 onOptionsItemSelected() 的回调.也可以在你的fragment layout中通过调用 registerForContextMenu() 注册一个view来提供一个环境菜单.当用户打开环境菜单, fragment接收到一个对 onCreateContextMenu() 的调用.当用户选择一个项目, fragment接收到一个对onContextItemSelected() 的调用。 注意: 尽管你的fragment会接收到它所添加的每一个菜单项被选择后的回调,  但实际上当用户选择一个菜单项时, activity会首先接收到对应的回调.如果activity的on-item-selected回调函数实现并没有处理被选中的项目, 然后事件才会被传递到fragment的回调。 例子 onCreate() 期间调用 setHasOptionsMenu() 来指出fragment愿意添加item到选项菜单 public static class DetailsFragment extends Fragment {Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setHasOptionsMenu(true);} } 操作菜单 Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {// TODO Auto-generated method stubsuper.onCreateOptionsMenu(menu, inflater);menu.add(Menu 1a).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);menu.add(Menu 1b).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);}Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubToast.makeText(getActivity(), index isgetShownIndex() menu text is item.getTitle(), 1000).show();return super.onOptionsItemSelected(item);}     还记得文章上面提到过的阅读新闻的例子吗讲Fragment意义那里下面我就来实现这个功能 我们先贴出效果图 竖屏        点击第二条新闻后如下图   横屏状态   下面贴上代码  先要创建两个布局文件一个用于横屏、一个用于竖屏  其代码分别为 layout/main.xml: ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationhorizontal fragment classcom.topcsa.test_fragment.ListFragmentandroid:idid/titlesandroid:layout_weight1android:layout_width0pxandroid:layout_heightmatch_parent//LinearLayout layout-land/main.xml: ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationhorizontal fragment classcom.topcsa.test_fragment.ListFragmentandroid:idid/titlesandroid:layout_weight1android:layout_width0pxandroid:layout_heightmatch_parent/FrameLayout android:idid/detailandroid:layout_weight2android:layout_width0pxandroid:layout_heightmatch_parentandroid:background?android:attr/detailsElementBackground/FrameLayout/LinearLayout   包下的文件如下 下面依次贴上代码代码有详细注释   package com.topcsa.test_fragment;public final class Data {public static final String[] titles { 日本买两栖舰欲圆航母梦 最后得鸡肋,中将中国坦克兵素质优异 96A凸显四大质量问题, 台湾政坛又炸锅与大陆首席谈判代表是“共谍” };public static final String[] DETAIL {日本防卫相小野寺五典8月4日在东京都发表演讲又一次强调了两栖攻击舰的重要性指出日本将从美国购买黄蜂级两栖攻击舰。若发展顺利新型两栖攻击舰将于2019年服役日本海上自卫队成为其最大舰艇。,首先这主要是一场坦克乘员素质的比赛比技能、比体能、比心理素质。应该说中国坦克兵表现堪称完美。射击比赛第一除了装备因素外娴熟的操作技能和全车乘员协调一致的动作是获胜的关键。装备性能可以提供高命中率的客观条件但在高速行进中(在视频中看96A坦克行进间射击的时速应在20-25千米/小时)能发发命中目标则主要取决于人的因素。而T-72坦克行进间射击时速都不超过10千米/小时甚至是短停射击差距就大了。96A坦克上反式稳像火控的反应速度、精度和在复杂工况条件的稳定性大大超过了T-72下反式火控。96坦克初期型号也是下反式稳像火控远不至于在这次比赛中T-72坦克表现得这么差这就是坦克乘员的素质在起作用了。只能说中国坦克兵的素质高于国外同行。另外我军坦克兵射击训练的难度大大超过了这次竞赛条件。譬如射击跑道是起伏的、弯曲的目标间夹角不小于17密位(这次比赛也就1-2密位)打完一个目标后需要大角度、高速度调炮瞄向下一个目标;目标不仅是隐显的还是隐蔽的周围不能有明显方位物(这次比赛在靶标附近设立了一个独立家屋便于搜索和指示目标);96A坦克在训练中以打运动目标为主目标时速不低于12千米/小时(这次目标是固定的目标色彩与背景反差也较大)如果换成运动目标估计T-72坦克脱靶的更多。装备也是重要因素。在视频中看到T-72坦克弹迹和弹着点都能看到说明它的炮口初速不大于1000米/秒而96A坦克根本看不到弹迹弹着点烟尘也小很多贯穿布靶时形成一个小洞说明我炮口初速和钨芯脱壳穿甲弹的侵彻力远高于T-72坦克。我命中部位大多进入目标9区(井字格四周8个区中心为9区)说明我坦克炮千米立靶密集度集中精度高、弹道稳定。,两岸发展关系台湾的政治稳定至关重要。台湾社会很多人或许没有意识到台湾政治的一些深层无序已经相当严重。大陆与世界很多经济体谈自贸区或类似协定但唯有同台湾的这一份冒出遭学生抗议并搁置的离奇周折张显耀也是第一位被疑遭大陆“策反”的首席谈判代表。, }; } View Code   package com.topcsa.test_fragment;import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ScrollView; import android.widget.TextView;public class DetailFragment extends Fragment {public static DetailFragment newInstance(int index){DetailFragment fnew DetailFragment();Bundle bundlenew Bundle();bundle.putInt(index, index);f.setArguments(bundle);//将bundle对象作为Fragment的参数保存return f;}public int getShownIndex(){//获取要显示的列表项索引return getArguments().getInt(index,0);}Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if(containernull){return null;}//创建一个滚动视图ScrollView slnew ScrollView(getActivity());TextView textnew TextView(getActivity());text.setPadding(10, 10, 10, 10);sl.addView(text);//设置文本框中要显示的文本text.setText(Data.DETAIL[getShownIndex()]);return sl;} } View Code   package com.topcsa.test_fragment;import android.app.Fragment; import android.app.FragmentTransaction; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView;public class ListFragment extends android.app.ListFragment {boolean dualPane;// 是否在同一界面上显示列表和内容int curCheckPosition 0;// 当前选择的索引位置 Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);//为列表设置适配器setListAdapter(new ArrayAdapterString(getActivity(),android.R.layout.simple_list_item_checked, Data.titles));//获取布局文件中添加的帧布局管理器View detailFramegetActivity().findViewById(R.id.detail);//判断是否在一屏上同时显示列表和详细内容dualPanedetailFrame!nulldetailFrame.getVisibility()View.VISIBLE;if(savedInstanceState!null){//更新当前的索引位置curCheckPositionsavedInstanceState.getInt(curChoice,0);}if(dualPane){//设置列表为单选模式getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);showDetails(curCheckPosition);//显示详细内容}}//该方法在STOP()之前执行用于保存当前选中项的列表项的索引值Overridepublic void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);outState.putInt(curChoice, curCheckPosition);}Overridepublic void onListItemClick(ListView l, View v, int position, long id) {// TODO Auto-generated method stubshowDetails(position);//显示详细内容}private void showDetails(int index) {curCheckPositionindex;if(dualPane){getListView().setItemChecked(index, true);//设置选中状态//获取用于显示详细信息的FragmentDetailFragment df(DetailFragment) getFragmentManager().findFragmentById(R.id.detail);if(dfnull||df.getShownIndex()!index){//创建一个新的DetailFragment实例用于显示当前选项对应的详细内容dfDetailFragment.newInstance(index);//在Activity中管理fragment需要使用FragmentManager//获得一个FragmentTransaction实例FragmentTransaction ftgetFragmentManager().beginTransaction();//替换原来显示的详细内容ft.replace(R.id.detail, df);//设置转换效果ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);ft.commit();//提交事务}}else{//竖屏Intent intentnew Intent(getActivity(),MainActivity.DetailActivity.class);intent.putExtra(index, index);startActivity(intent);}}} View Code   package com.topcsa.test_fragment;import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.res.Configuration; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.os.Build;public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}public static class DetailActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);// 判断是否为横屏if (getResources().getConfiguration().orientation Configuration.ORIENTATION_LANDSCAPE) {finish();return;}if (savedInstanceState null) {//在初始化时插入一个显示详细内容的Fragment//实例化DetailFragment对象DetailFragment detail new DetailFragment();//设置传递的参数detail.setArguments(getIntent().getExtras());//添加一个显示详细内容的FragmentgetFragmentManager().beginTransaction().add(android.R.id.content, detail).commit();}}}} View Code   最后别忘了清单文件的配置内部Activity的注册 activity android:namecom.topcsa.test_fragment.MainActivity$DetailActivityandroid:label详细内容/activity      新闻阅读Demo下载http://download.csdn.net/detail/af74776/7806353     本文重点参考了的文章基本上算是大汇总吧http://blog.csdn.net/lilu_leo/article/details/7671533                      http://www.cnblogs.com/mengdd/archive/2013/01/08/2851368.html                      http://www.cnblogs.com/yydcdut/p/3921297.html转载于:https://www.cnblogs.com/scetopcsa/p/3930733.html
http://www.zqtcl.cn/news/216062/

相关文章:

  • 高校学风建设专栏网站亿速云
  • iis 发布asp网站代码编程入门
  • 游戏的网站策划应该怎么做微信小程序开发300元
  • 网站关键词优化怎么弄做网站找哪家最好
  • 提供零基础网站建设教学网站做302重定向
  • 无锡网站推广外包服务页面设计参评
  • 班级网站设计素材有没有专业做盐的网站
  • 免费做旅游海报的网站深圳网站建设公司哪里有
  • 制作网站空间域名哈尔滨网站建设 博客
  • 如何做搞笑的视频视频网站五合一网站建设方案
  • 百怎么做网站经典传奇网页游戏
  • 国外网站设计案例做淘宝客网站能有效果吗
  • 做网站商城需要什么建立一个企业网站
  • 住房城乡建设厅网站wordpress外链视频播放
  • 中国建设银行网站开通短信企业搭建自己的网站
  • 苏州网站维护云梦县城乡建设局网站
  • 分类信息导航网站模板建设银行网站每天几点更新
  • 百度竞价排名规则及费用seo怎么做整站排名
  • 网站免费模板资源商标设计一般多少钱
  • 视频微网站开发谷歌怎么做网站推广
  • 微信公众号服务号网站开发流程网站推广网络
  • 徐州网站建设技术wordpress 分辨 模版
  • 慈溪企业网站建设公司wordpress网盘搜索引擎源码
  • 建筑类企业网站模板怎么制作网站链接
  • 常州网站建设外包襄阳做网站的
  • 临清网站优化用jsp做网站的感想
  • 个人工作室网站网站备案 万网
  • 网络推广模板网站会员管理软件
  • 西乡塘网站建设网站建设公司的成本有哪些方面
  • 在哪里可以学习做网站西安制作公司网站的公司