barriers / 阅读 / 详情

使用Fragment有什么好处?

2023-07-23 08:03:16
共2条回复
小教板
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
我前段时间看了了fragment的知识点,你可以参考下eoe这边帖子,可能会找到你要的答案: http://www.e********.com/thread-117068-1-1.html
S笔记

二、Fragment优点

1.Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。

2.Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。

3.Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。

4.Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。

5.Fragment 切换流畅,轻量切换。

6.Fragment 替代TabActivity做导航,性能更好。

7.Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效果。

Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能。

可以从startActivityForResult中接收到返回结果,但是View不能。

相关推荐

fragment是什么意思

中文翻译为:End Fragment端片段例句:1、CLONING OF P1 PROTEIN C END GENE FRAGMENT OF Mycoplasma pneumonia INTO E.coli肺炎支原体P1蛋白羧基端基因片段在大肠杆菌中克隆的研究2、A preliminary study on detecting plasmodium falciparum based on PCR amplification of 3~,-end fragment of CSP genePCR扩增环子孢子蛋白基因3"端片段用于检测恶性疟原虫的初步研究3、According to the sequenced information, another specific primers were designed again, the 3 " end fragment and 5 " end fragment of 14-3-3 gene were obtained by 3 " RACE and 5 " RACE.根据测得的序列信息,再设计一对引物,利用5"RACE和3"RACE技术分别扩增目的基因的5"端和3"端,鉴定正确后并测序。
2023-07-23 02:45:172

fragment是什么意思

fragment作为名词是“碎片”“片段”的意识;作为动词是“使破碎;分裂”的意思。这个词侧重于指破裂的,不完整的,不可完整的碎片。作为名词的用法意为碎片,片段,例句:Police found fragments of pencil near the scene警方在现场附近发现了玻璃碎片。The shattered vase lay in fragments on the floor.打碎的花瓶在地上成了一堆碎片。Overheard a fragment of their conversation.我无意中听到他们谈话的只言片语。请点击输入图片描述作为动词,意为“使破碎;分裂”Do not let the discussion fragment into a desultory conversation with no clear direction.不要让讨论变得支离破碎,成为没有明确方向的漫谈。Lough Erne fragmented into a series of lakes.厄恩湖被分成几个湖泊。The interruption fragmented his argument.因打岔,他的论点没讲完。请点击输入图片描述同时还要注意区分bit, piece, sheet,slice,scrap它们之间的区别:bit 侧重指微小,一点点,小碎片。piece 最普通用词,多指从整体上分割下来的东西,可大可小。sheet 侧重指平整很薄的一张或一片。slice 多指切得很薄的一片食物。fragment 指破裂的,不完整的,不可完整的碎片。scrap 侧重指废弃的零碎之物。联想记忆我们不仅要知道这个单词是什么意思更重要的是要把它记住并用于实践。frag换成flag(旗帜),可以联想为气质被暴风雨吹的支离破碎了fragment。
2023-07-23 02:45:441

Fragment详解

Activity用来管理Fragment。因为一个Fragment可以被多个Activity嵌套,有个共同的业务模块就可以复用了 Fragment具有自己生命周期,是模块化UI的良好组件。 Fragment的生命周期是寄托到Activity中,Fragment可以被Attach添加和Detach释放。 Fragments是view controllers,它们包含可测试的,解耦的业务逻辑块,由于Fragments是构建在views之上的,而views很容易实现动画效果,因此Fragments在屏幕切换时具有更好的控制。 Fragment可以像普通对象那样自由的创建和控制,传递参数更加容易和方便,也不用处理系统相关的事情,显示方式、替换、不管是整体还是部分,都可以做到相应的更改。 可以看出Fragment生命周期与Activity类似 解释如下: 上面的方法中,只有onCreateView()在重写时不用写super方法,其他都需要。 因为Fragment依赖Activity,那么Fragment和Activity的生命周期可谓是息息相关,如下图所示 Activity的FragmentManager负责调用队列中Fragment的生命周期方法,只要Fragment的状态与Activity的状态保持了同步,托管Activity的FragmentManager便会继续调用其他生命周期方法以继续保持Fragment与Activity的状态一致。 Activity-onCreate(begin) ,Fragment-onAttach-onCreate-onCreateView-onViewCreated, Activity-onCreate(end) ,Fragment-onActivityCreated, Activity-onStart ,Fragment-onStart, Activity-onResume ,Fragment-onResume Fragment-onPause, Activity-onPause ,Fragment-onStop, Activity-onStop Activity-onRestart-onStart ,Fragment-onStart, Activity-onResume ,Fragment-onResume Fragment-onPause, Activity-onPause ,Fragment-onStop, Activity-onStop ,Fragment-onDestroyView-onDestroy-onDetach, Activity-onDestroy Fragment的管理则交由FragmentActivity的FragmentManager来实现。 获取方式: 注意 :在fragment创建childFragment的时候,需要注意的是:使用getChildFragmentManager() 使用getFragmentManager()会导致内存泄漏 常用API: popBackStackImmediate相关的方法与上面逻辑是一样的与上面不同的是,在调用的时候会立即执行弹出。 通过FragmentTransaction实现在Activity运行时可动态地加入、移除、交换Fragment FragmentTransaction的主要方法介绍 针对在一个Activity中的某个Layout中切换Fragment,无非两种方法: 当移除或替换一个片段并向返回栈添加事务时,系统会停止(而非销毁)移除的片段。 如果用户执行回退操作进行片段恢复,该片段将重新启动。 具体实例可参看: Fragment的addToBackStack()使用 commit(), commitNow()和commitAllowingStateLoss()区别分析 实例: 使用setArguments(Bundle args)传递,在onCreate中使用getArguments()取出。和Activity的Intent恢复机制类似。 1、如果你需要在Fragment中用到宿主Activity对象,建议在你的基类Fragment定义一个Activity的全局变量,在onAttach中初始化,这不是最好的解决办法,但这可以有效避免一些意外Crash。 2、onHiddenChanged的回调时机 当使用add()+show(),hide()跳转新的Fragment时,旧的Fragment回调onHiddenChanged(),不会回调生命周期方法,而新的Fragment在创建时是不会回调onHiddenChanged() 推荐阅读: Fragment全解析系列(二):正确的使用姿势 、 Fragment全解析系列(一):那些年踩过的坑
2023-07-23 02:46:251

Android组件之Fragment(一)---基础知识与运用

Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!想想,如果一个很大的界面,我们 就一个布局,写起界面来会有多麻烦,而且如果组件多的话是管理起来也很麻烦!而使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理!从而可以更加方便的在 运行过程中动态地更新Activity的用户界面!另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Activity 被destory销毁了,他也会跟着销毁! 引用官方的一张图片,其实已经说明问题了,就是为了更好的适配大屏,在大屏的时候,不需要去在一个activity内部通过复杂的布局和界面去实现,只需要去在一个activity内部,通过多个fragment来做界面布局实现即可,而且针对于多个fragment来说, 每个fragment有单独的生命周期, Demo样例,我们在一个界面中,有上下两个fragment,如图所示: Step 2: Fragment创建,视图加载,数据赋值 BlankFragment .java Step 3: Activity在onCreate( )方法中调用setContentView()之后调用FragmentTransaction 进行事务提交 FragmentTestActivity.java 在xml中声明两个fragment,指定为具体的fragment Step 1:定义Fragment的布局,就是fragment显示内容的 Step 2:自定义一个Fragment类,需要继承Fragment或者他的子类,重写onCreateView()方法 在该方法中调用:inflater.inflate()方法加载Fragment的布局文件,接着返回加载的view对象 BlankFragment.java Step 3:在需要加载Fragment的Activity对应的布局文件中添加fragment的标签, 记住,name属性是全限定类名哦,就是要包含Fragment的包名,如: Step 4: Activity在onCreate( )方法中调用setContentView()加载布局文件即可! 针对在一个Activity中的某个Layout中切换Fragment,,无非两种方法: 我们自己看一下方法注释 源码方法注释里面说的很明白,这个方法会移除所有的fragment,然后添加当前的fragment。 这时分为两种情况,一种是fragment已有并且在前台展示,一种是未有或者在后台,针对于前者,此时replace,生命周期不会发生变化,针对后者,生命周期会重新走 分为两种情况,一种fragment已存在,一种未存在,针对于前者,生命周期无变化,但是会回调onHiddenChanged方法,针对于后者,生命周期会创建一次。 1.Fragment是Google官方引入的一个为了适配大屏、多页面的一个组件。您可以理解为它就是一个类而已,只不过里面包含了View,并且与activity的生命周期进行了关联。 2.动态加载与静态加载相对来说,建议使用动态加载,静态加载固定在了xml文件中,永远不变。 3.replace的fragment如果不在前台,会执行所有生命周期,反之不会执行任何生命周期方法;hide+show生命周期并不会发生变化,但是会回调onHiddenChanged方法,在实际开发中,建议add之后,使用hide+show来操作fragment,一方面减少资源的重复加载和创建,另外一方面提升用户体验感。 4.fragment的生命周期大体上和activity一致,但是前期和后期多了一些东西,因为fragment内部有view,那么这个view需要进行创建、然后添加到activity内部,所以相应的在onCreate与onStart之间就多了几个方法-onCreateView、onViewCreated。相同的道理,fragment的view与activity解绑,也相应的在onStop与onDestory之间多个方法-onDestroyView。onAttach与onDetach可以理解为视图与activity产生关联和接触关联,是最开始和最后的步骤。 Demo地址
2023-07-23 02:46:321

fragment和fragmentation有什么区别?

fragment 名词 碎片 动词 (使)分裂fragmentation 名词 裂成碎片
2023-07-23 02:46:402

简述Fragment的作用

Fragment 是什么今天我们来学习一个比较重要的组件--Fragment。Fragment在应用开发中应用得非常的频繁,特别是在开发一些需要兼容手机设备、平板设备和智能电视等大屏幕设备的应用,Fragment发挥着重要的作用。那说了这么多,Fragment到底是什么呢?在这里我们先简单的用一句话总结就是:Fragment是Android为了应用适配不同设备的大屏幕、支持更加动态和灵活的UI设计所提供的一个组件。说到Fragment,就会联想到Activity,因为Fragment对象在应用中一般是不能独立存在的,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,他拥有的所有的Fragment都暂停了,当activity销毁时,他拥有的所有Fragment都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),可以单独地操作每个Fragment,比如添加或删除它们。当中执行上述针对Fragment的事务时,可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。当向activity中添加一个Fragment时,它须置于ViewGroup控件中,并且需定义Fragment自己的界面。可以在layout.xml布局文件中声明Fragment,元素为:<fragment>;也可以在代码中创建Fragment,然后把它加入到ViewGroup控件中。然而,Fragment不一定非要放在activity的界面中,它可以隐藏在后台为activity工作。Android在3.0之后引入了Fragment的概念,主要目的是用在大屏幕设备-例如平板电脑上,以便支持更加动态和灵活的UI设计。平板电脑的屏幕尺寸比手机大得多,因此有更多的空间来存放更多的UI组件,并且这些组件之间会产生更多的交互。Fragment允许这样的一种设计,而不需要你亲自来管理viewhierarchy的复杂变化。通过将Activity的布局分散到Fragment中,你可以在运行时修改Activity的外观,并在由Activity管理的Back stack中保存那些变化。例如,一个新闻应用可以在屏幕的左侧使用一个Fragment来展示一个文章的列表,然后在屏幕右侧使用另一个Fragment来展示一篇文章,两个Fragment并排显示在相同的一个Activity中,并且每一个Fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输入事件。因此,取代使用一个activity来选择一篇文章而另一个activity来阅读文章的方式,用户可以在同一个activity中选择一篇文章并且阅读,如图所示详细
2023-07-23 02:47:181

说说什么是 Android 的碎片(Fragment)

碎片(Fragment),是一种可以嵌入活动当中的 UI 片段,它能让程序更加合理和充分地利用大屏幕的空间,因此在平板上应用广泛。 假设我们正在开发一个新闻应用,其中一个界面使用 RecyclerView 展示一组新闻标题,当点击了其中一个标题时,就打开了另一个界面用于显示新闻的详细内容。 若是在手机中设计,我们可以将新闻标题列表放在一个活动中,而将新闻的详细内容放在另一个活动中: 这样的设计方案放在平板上,那么新闻标题将会被拉长直至填充满整个平板的屏幕,而新闻的标题一般都不会太长,所以这样就会导致界面上存在大量的空白区域: 因此,更好的设计方案是将新闻标题列表界面和新闻详细内容界面分别放在两个碎片中,然后在同一个活动里引入这两个碎片,这样就可以充分利用平板的屏幕空间咯O(∩_∩)O~
2023-07-23 02:47:261

在Android开发中fragment有什么优缺点

Fragment优点Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。Fragment 解决Activity间的切换不流畅,轻量切换。Fragment 替代TabActivity做导航,性能更好。Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效果。Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能。可以从startActivityForResult中接收到返回结果,但是View不能。反正我是没有看到fragment有什么缺点(可能是我程度没达到),再说它(fragment)就是一个api而已感觉不好就用activity就ok了。
2023-07-23 02:47:351

细读 React | Fragment

React 中的一个常见模式是一个组件返回多个元素。Fragments 允许你将子列表分组,而无需向 DOM 添加额外节点。 假设我们要使用 React 组件渲染以下这段真实 DOM 节点。 要怎么做呢?很简单,谁都知道... React.Fragment 是在 React 16.2 新增的新特性,旧版本并不支持。下面我们从几个方面,说明 Fragment 的好处。 在低于 React 16.0 的版本,类组件或函数组件有很多限制。 比如,它们必须返回 React 元素 或 null 。其中 React 元素包括类似 <MyComponent /> 等自定义组件、类似 <div /> 等 DOM 节点元素。 正确示例: 错误示例: 类组件同理。当不正确使用时,将会报错: 这种方案的缺点也是显而易见的,在组件的返回值上,总需要一层 <div>、<span> 或其他 DOM 节点包装起来。当 React 渲染成真实 DOM 时,这个包装节点总是会存在的。 很多时候,往往这个包装节点对我们的 UI 层是没有意义的,反而加深了 DOM 树的层次。但很无奈,谁让我们要用 React 呢,人家语法限制就那样... 除了原来的 React 元素和 null 之外,新增了几种类型: 例如: 相比 React 15.x 及更早版本,这种方式实在是太棒了。除了支持更多类型,最重要的是不会增加额外的节点。 前面提到,React 15.x 里的 React 组件总是避免不了需要一层可能是“无谓”的节点节点进行包装,那么 React 16.0 的改进,可以解决如下场景: 问题示例: 根据 W3C 的要求,一个合法的 <table> , <tr> 的子元素必须是 <td> 。而 React 这种组件的写法直接破坏了 <table> 结构,最终也得不到我们的预期结果。 如果按照 React 16.x 提供的新特性,可以轻松解决... 自 React 16.2 起,开始支持 React.Fragment 语法。前面提到该特性是对数组形式的一种增强用法。 它的语法非常简单,把它是 React 内置的一个 React 组件。 key 是唯一可以传递给 Fragment 的属性。将来可能会添加对其他属性的支持,例如事件处理程序。 也可以使用它的简写语法 <></> ,但这种写法不接受任意属性,包括 key 。 回到文章开头的示例,要渲染这样一段真实 DOM 节点。 前面提到,可以有几种解决方案,各有利弊。 解决方法一 低于 React 16.0 版本,由于不支持 Fragment 和数组形式,唯一的方法是将它们包装在一个额外的元素中,通常是 div 或 span 。如下: 但上述这种方法有个缺点,在渲染成真实 DOM 的时候,会增加一个节点,比如上述的 <div /> 。 解决方法二 自 React 16.0 起,支持数组形式。因此可以这么做: 这种方式有点麻烦,我们对比一下 Fragment 形式。 解决方法三(推荐) 自 React 16.2 起,支持 React.Fragment 语法,因此我们可以这样使用。 仔细对比数组和 Fragment 形式,可以发现数组形式有以下缺点: 以上这些限制 Fragment 统统都没有,我们就按正常的思维去编写 DOM 节点就好了。
2023-07-23 02:47:431

Fragment的可见性

需求: app首页多个tab的情况下,刷新消息tab Fragment的消息列表,为避免重复刷新,有两种情况下需要刷新: 1.从其他tab切换至消息tab时,刷新消息列表; 2.消息tab选中时,在此fragment跳转消息详情页后再次返回,刷新消息列表; 就这两种情况,如何实现以上两种情况下的消息刷新,此时就涉及到fragment 的可见性。 可见性: 关于Fragment的可见与不可见,两种情况下的调用方法不一样: 1.使用ViewPager+Fragment实现多tab页切换,此时可通过setUserVisibleHint(boolean isVisibleToUser)这个方法获取当前fragment的可见与否 2.使用Tablayout+Fragment实现多tab页切换,此时可通过onHiddenChanged(boolean hidden)这个方法获取当前fragment的可见性 举个栗子: 使用情况:使用Tablayout+Fragment
2023-07-23 02:47:501

android 中fragment有什么优点?

1.Fragment是android3.0引入的新控件,果应用使用在3.0以下、1.6及以上的版本,需要引入v4包。2.Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等。3.Fr期方法依赖于Activity的生命周期,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用。4.FragmentManager提供了对Activity运行时的Fragment的添加、删除、替换的操作。在Activity运行期间可以添加Fragment而不是在XML布局文件中进行定义。如果打算在Activity中改变Fragment的生命过程。如果要执行添加、删除、修改的操作,必须通过FragmentManager的对象获得一个FragmentTransaction对象,通过它的API来执行这些操作。5.两个单独的Fragment之间是不应该进行通信的。应该使用他们所存在的Activity作为沟通的纽带。
2023-07-23 02:47:571

android 怎么开启fragment

需要做的准备新建一个android项目,主Activity命名为MainActivity创建三个Fragment1 Fragment2 Fragment3为三个Fragment创建三个布局文fragment1.xml、fragment2.xml、fragment3.xml布局 activity_main.xmfragment1.xml样例Fragment1样例另外的可以根据样例进行修改activity_main.xml内容activity打开时我们需要显示一个fragment,也就是需要先向容器中添加一个fragment这是就能显示第二个fragment了,那么如何切换不同的fragment呢,切换的过程如下开启事务调用事务的replace方法,将当前容器的fragment替换为新的fragment提交事务初始化时显示的是 fragment2实践1 :fragment2------点击按钮frag1-----按返回键--------退出应用实践2: fragment2-----点击按钮frag3 -----按返回键--------返回到fragment2为啥会出现上面的情况,原因就是切换到fragment3时,调用了addToBackStack方法,这时会将fragment2先入栈,然后再切换到fragment3,按返回键的时候fragment3销毁,fragment2出栈显示,而切换到fragme1时没有将fragme2入栈,所以fragment2就直接销毁了,再按返回键就直接退出应用了。
2023-07-23 02:48:061

如何在现有fragment上添加另一个fragment

请参阅Android: 不能替换另一个的一个片段如何显示一个选项卡内的一个新片段?这里是解决方案。在 home_activity.xml,你应该离开空你 tabcontent。<FrameLayoutandroid:id="@+id/tabcontent"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" />您的 Home_Activityprivate FragmentTabHost mHost;public void changeFragment() {FragmentTransaction ft = getSupportFragmentManager().beginTransaction();EntertainmentFragment enFragment = new EntertainmentFragment();ft.replace(R.id.tabcontent, enFragment);ft.commit();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mHost = (FragmentTabHost) findViewById(android.R.id.tabhost);mHost.setup(this, getSupportFragmentManager(), R.id.tabcontent);mHost.addTab(mHost.newTabSpec("School").setIndicator("School"), SchoolFragment.class, null);mHost.addTab(mHost.newTabSpec("Sport").setIndicator("Sport"), SportsFragment.class, null);}在您的 onIemClick (Sports_Fragment),添加这MainActivity mainAct = (MainActivity)getActivity();mainAct.changeFragment();我充分的项目,基于您的代码,是在这里。我还没有机会真的检查 TabHost 为什么不工作时我测试您的代码。但FragmentTabHost的作品对我很好。编辑: 若要修复重叠问题,您可以设置 OnTabChangeListener:mHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {@Overridepublic void onTabChanged(String tabId) {// TODO Auto-generated method stubif (tabId.equalsIgnoreCase("School")) {Log.v(TAG, "school");FragmentTransaction ft = getSupportFragmentManager().beginTransaction();schoolFrag = new SchoolFragment();ft.replace(R.id.tabcontent, schoolFrag);ft.commit();}if (tabId.equalsIgnoreCase("Sport")) {Log.v(TAG, "Sport");FragmentTransaction ft = getSupportFragmentManager().beginTransaction();SportsFragment sportFrag = new SportsFragment();ft.replace(R.id.tabcontent, sportFrag);ft.commit();}}});关于 backpress,您可以尝试ft.addToBackStack(null);
2023-07-23 02:48:141

如何判断当前的Fragment是否可见

判断Fragment是否对用户可见的方法是通过setUserVisibleHint来实现的。1、通过重写setUserVisibleHint来动态设定Fragment是否可见 @Overridepublic void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); isVisible = isVisibleToUser; // Make sure that fragment is currently visible if (!isVisible && isResumed()) { // 调用Fragment隐藏的代码段 } else if (isVisible && isResumed()) { // 调用Fragment显示的代码段 }}2、setUserVisibleHint这个方法默认是true,确实是需要用户手动调用的,如果你使用fragment配合FragmentPagerAdapter使用的话,adapter会在内部控制setUserVisibleHintFragment() 这个方法(请看FragmentPagerAdapter源码) ,如果是自己控制fragment的话,就需要手动调用setUserVisibleHintFragment() 这个方法了。
2023-07-23 02:48:212

如何在linearlayout里添加fragment

Fragment中的onCreateView的时候 要求返回一个创建好的视图View,你只需要将你的LinearLayout,定义在这个view中即可关于Fragment介绍及生命同期:1、Fragment的产生与介绍Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。2、Fragment的生命周期Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。官网这张图很好的说明了两者生命周期的关系:可以看到Fragment比Activity多了几个额外的生命周期回调方法:onAttach(Activity)当Fragment与Activity发生关联时调用。onCreateView(LayoutInflater, ViewGroup,Bundle)创建该Fragment的视图onActivityCreated(Bundle)当Activity的onCreate方法返回时调用onDestoryView()与onCreateView想对应,当该Fragment的视图被移除时调用onDetach()与onAttach相对应,当Fragment与Activity关联被取消时调用.注意:除了onCreateView,其他的所有方法如果你重写了,必须先调用父类的该方法
2023-07-23 02:48:391

android中Fragment的切换方法。

需要做的准备新建一个android项目,主Activity命名为MainActivity创建三个Fragment1 Fragment2 Fragment3为三个Fragment创建三个布局文fragment1.xml、fragment2.xml、fragment3.xml布局 activity_main.xmfragment1.xml样例Fragment1样例另外的可以根据样例进行修改activity_main.xml内容activity打开时需要显示一个fragment,也就是需要先向容器中添加一个fragment这是就能显示第二个fragment了,那么如何切换不同的fragment呢,切换的过程如下开启事务调用事务的replace方法,将当前容器的fragment替换为新的fragment提交事务注意上图红框中的addToBackStack方法,很多人都不是很清楚这个方法的实际作用,说一下程序运行时候的现象你就明白了初始化时显示的是 fragment2实践1 :fragment2------点击按钮frag1-----按返回键--------退出应用实践2: fragment2-----点击按钮frag3 -----按返回键--------返回到fragment2为啥会出现上面的情况,原因就是切换到fragment3时,调用了addToBackStack方法,这时会将fragment2先入栈,然后再切换到fragment3,按返回键的时候fragment3销毁,fragment2出栈显示,而切换到fragme1时没有将fragme2入栈,所以fragment2就直接销毁了,再按返回键就直接退出应用了
2023-07-23 02:48:471

android fragment和activity的区别

fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包,而fragmentActivity就是这个兼容包里面的,它提供了操作fragment的一些方法,其功能跟3.0及以后的版本的Activity的功能一样。
2023-07-23 02:48:572

android 怎样隐藏当前的fragement

解决方法 1:您可以使用此方法要锁定或解锁抽屉: DrawerLayout.setDrawerLockMode(...) 。(也有两个其他版本的此方法,以指定特定抽屉锁模式)。若要锁定,使用 DrawerLayout.LOCK_MODE_LOCKED_CLOSED ; 要解除锁定,请使用DrawerLayout.LOCK_MODE_UNLOCKED 。如果您正在使用 ActionBarDrawerToggle,您需要添加一些额外的代码以防止抽屉打开时他们单击 ActionBarDrawerToggle,如果你把锁抽屉。@Overridepublic boolean onOptionsItemSelected(MenuItem item) { // check lock mode before passing to ActionBarDrawerToggle // I assume your drawer is on the left; if not, use Gravity.RIGHT int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT); if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED && mDrawerToggle.onOptionsItemSelected(item)) { return true; } // Handle your other action bar items... return super.onOptionsItemSelected(item);}
2023-07-23 02:49:062

如何在一个fragment or 任意类中操作另一个fragment中的方法

1 如何在acitivty中执行fragment中的方法:首先获得这个Fragment的对象xxxFragment fragmentObject = (xxxFragment) getFragmentManager.findFragmentByTag("xx");2 如何在Fragment中执行activity中的方法:第一种:让acitivity继承接口第二种:在fragment中使用getActivity()但是要加上acitivity的名字,即:((MainActivity)getActivity()).xxx();3 如果在fragment中要操作一个fragment,首要要得到这个对象,如何得到?使用getActivity中的FragmentMnager的getFragmentByTag,然后就可以使用这个fragment的对象来操作他的方法了。当然获得这个Fragment的时候要转成这个Fragment的一个对象eg:FragmentManager fm = getActivity.getSupportFragmentManager();xxxFragment = (xxxFragment)fm.findFragmentByTag("xxx")4 如何在任意类中操作一个fragment,首先要得到环境参数,如何得到?在activity中:private static WeakReference<ActionButtonActivity> actionButtonActivty = null;actionButtonActivty = new WeakReference<ActionButtonActivity>(this);从activity中将这个actionButtonActivity对象传递到这个任意类中asyncTask.setActivity(actionButtonActivty);在任意类中:private static WeakReference<ActionButtonActivity> actionButtonActivty;public void setActivity(WeakReference<ActionButtonActivity> actionButtonActivty) {this.actionButtonActivty = actionButtonActivty;}/*** this method is invoked on the UI thread after the background computation* finishes. The result of the background computation is passed to this step* as a parameter.*/@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);FragmentManager fm = actionButtonActivty.get().getFragmentManager();FragmentTransaction ft = fm.beginTransaction();BFragmentTab_one_event_details bt_det = (BFragmentTab_one_event_details) fm.findFragmentByTag("2_det");bt_det.setEvidenceImage(result);bt_det.setButtonClickable();ft.addToBackStack(null).commit();}
2023-07-23 02:49:141

ViewPager中怎么获取Fragment

一样用,但是fragment里嵌套的fragment不能用getsupportFragmentManager而是要用getChildXXXXXManager才行
2023-07-23 02:49:235

为什么有两个fragment

两个Fragment使用上是没有区别的fragment是安卓3.0以上才引入的新东西如果你想兼容3.0以下的版本,那么你就要使用v4包的如果你的app本身不是 minSDK >14的,你可以直接用android.app包下面的
2023-07-23 02:49:451

请问Android中的Fragment有什么作用?

Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。在秒秒学的网站中有专门的课程来介绍Frament。
2023-07-23 02:50:061

Fragment无法转换是为什么

fragment是在3.0版本引入的,但是也可以在以前的版本中使用,需要引入android-support-v4.jar支持包,当然调用的方法也不一样,下面介绍的方法兼容了3.0以前的版本,主要介绍fragment的切换需要做的准备新建一个android项目,主Activity命名为MainActivity创建三个Fragment1 Fragment2 Fragment3为三个Fragment创建三个布局文fragment1.xml、fragment2.xml、fragment3.xml布局 activity_main.xmfragment1.xml样例Fragment1样例另外的可以根据样例进行修改activity_main.xml内容activity打开时我们需要显示一个fragment,也就是需要先向容器中添加一个fragment这是就能显示第二个fragment了,那么如何切换不同的fragment呢,切换的过程如下开启事务调用事务的replace方法,将当前容器的fragment替换为新的fragment提交事务注意上图红框中的addToBackStack方法,很多人都不是很清楚这个方法的实际作用,说一下程序运行时候的现象你就明白了初始化时显示的是 fragment2实践1 :fragment2------点击按钮frag1-----按返回键--------退出应用实践2: fragment2-----点击按钮frag3 -----按返回键--------返回到fragment2为啥会出现上面的情况,原因就是切换到fragment3时,调用了addToBackStack方法,这时会将fragment2先入栈,然后再切换到fragment3,按返回键的时候fragment3销毁,fragment2出栈显示,而切换到fragme1时没有将fragme2入栈,所以fragment2就直接销毁了,再按返回键就直接退出应用了
2023-07-23 02:50:141

fragment显示了一个listview,怎么使其点击有效

主activity是这样[mw_shl_code=java,true]public class MainTabHostActivity extends FragmentActivity{ private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("软件"),SoftwareFragment.class,null); mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("日志"),SoftwareFragment.class,null); mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("权限"),SoftwareFragment.class,null); mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("设置"),SoftwareFragment.class,null); }}[/mw_shl_code] 在onCreateView里面少了句:softwareListView.setOnItemClickListener(this);吧亲
2023-07-23 02:50:341

android中在fragment A里面点击button跳转到fragment B怎么实现?

通过onAttach(Activity activity) 这个参数,强转成当前activity,然后调用对应的方法,replace或是add fragmentB, 也可以让当前activity,实现个切换的接口,强转成接口调用切换函数。
2023-07-23 02:50:411

如何更新及替换ViewPager中的Fragment

ListView的工作原理 在了解ViewPager的工作原理之前,先回顾ListView的工作原理: ListView只有在需要显示某些列表项时,它才会去申请可用的视图对象;如果为所有的列表项数据创建视图对象,会浪费内存; ListView找谁去申请视图对象呢? 答案是...
2023-07-23 02:50:482

ActivityA嵌套一个FragmentA,FragmentA在嵌套一个FragmentB,FragmentB启动另外一个Activity的时候会报错

 1.fragment嵌套fragment时出现getActivity()为null  activity A嵌套fragment B,B嵌套fragment C,C跳转到activity D,当activity D被finish掉之后,C中容易爆出getActivity为空.如果你的activity被回收了,那你需要在bundle中保存一下fragment信息,我的解决方法:fragment实例化之后会到activity的fragmentManager中注册一下,这个动作封装在fragment中的onAttach(Activity activity)方法中,可以直接在onAttach(Activity activity)方法中去赋值  2.fragment嵌套fragment时没有执行子fragment的onActivityResult方法  activity A嵌套fragment B,B嵌套fragment C,C通过startActivityForResult跳转到activity D,当activity D被finish掉之后,没有执行C的onActivityResult  其实这个问题也不是每个人都会遇到,当activity A和Fragment B不重写onActivityResult方法,可能就不会出现这个问题,但是我的activity A重写了onActivityResult方法,所以当activity D被销毁的时候,直接去执行activity 的onActivityResult,其实这个问题也很简单,只是遇到的时候可能想不到,解决方案就是在Activity中的onActivityResult方法中加入super.onActivityResult(requestCode, resultCode, data);一切都ok了  Activity的onActivityResult方法:  protected void onActivityResult(int requestCode, int resultCode, Intent data) {  super.onActivityResult(requestCode, resultCode, data);   fragment的onActivityResult方法:  public void onActivityResult(int requestCode, int resultCode, Intent data) {
2023-07-23 02:50:551

fragment 这英语 怎么读(谐音的..)

fragment 译为碎片,中文谐音 弗瑞艾格门特
2023-07-23 02:51:032

android studio为什么一打开有fragment

没有遇到这种情况,你是在中文官网下载的吗?
2023-07-23 02:51:103

fragment是可数还是不可数

碎片是可数名词复数直接加s
2023-07-23 02:51:431

在Android开发中fragment有什么优缺点

自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片、片段。其目的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity 管理的back stack 中保存些变化。当一个片段指定了自身的布局时,它能和其他片段配置成不同的组合,在活动中为不同的屏幕尺寸修改布局配置(小屏幕可能每次显示一个片段,而大屏幕则可以显示两个或更多)。Fragment必须被写成可重用的模块。因为fragment有自己的layout,自己进行事件响应,拥有自己的生命周期和行为,所以你可以在多个activity中包含同一个Fragment的不同实例。这对于让你的界面在不同的屏幕尺寸下都能给用户完美的体验尤其重要。Fragment优点Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。Fragment 解决Activity间的切换不流畅,轻量切换。Fragment 替代TabActivity做导航,性能更好。Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效果。Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能。可以从startActivityForResult中接收到返回结果,但是View不能。Fragment的生命周期你可以把fragment看作是activity的模块化组件,它拥有自己的生命周期Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),你可以单独地操作每个Fragment,比如添加或删除它们。当你在执行上述针对Fragment的事务时,你可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。显示Fragment时(跟用户交互)要调用的核心的生命周期方法如下:1. 把Fragment对象跟Activity关联时,调用onAttach(Activity)方法;2. Fragment对象的初始创建时,调用onCreate(Bundle)方法;3. onCreateView(LayoutInflater, ViewGroup, Bundle)方法用于创建和返回跟Fragment关联的View对象;4. onActivityCreate(Bundle)方法会告诉Fragment对象,它所依附的Activity对象已经完成了Activity.onCreate()方法的执行;5. onStart()方法会让Fragment对象显示给用户(在包含该Fragment对象的Activity被启动后);6. onResume()会让Fragment对象跟用户交互(在包含该Fragment对象的Activity被启恢复后)。Fragment对象不再使用时,要反向回调的方法:1. 因为Fragment对象所依附的Activity对象被挂起,或者在Activity中正在执行一个修改Fragment对象的操作,而导致Fragment对象不再跟用户交互时,系统会调用Fragment对象的onPause()方法;2. 因为Fragment对象所依附的Activity对象被终止,或者再Activity中正在执行一个修改Fragment对象的操作,而导致Fragment对象不再显示给用户时,系统会调用Fragment对象的onStop()方法。3. onDestroyView()方法用于清除跟Fragment中的View对象关联的资源;4. Fragment对象的状态被最终清理完成之后,要调用onDestroy()方法;5. 在Fragment对象不再跟它依附的Activity关联的时候,onDetach()方法会立即被调用
2023-07-23 02:51:591

下列关于Fragment的描述,哪一项是错误的?

下列关于Fragment的描述,哪一项是错误的? A.Fragment拥有完整的生命周期,可以脱离Activity单独运行B.Activity运行时可以动态添加或删除FragmentC.Fragment可以应用多个Activity中D.Fragment可以被用作为非UI交互型的组件正确答案:Fragment拥有完整的生命周期,可以脱离Activity单独运行
2023-07-23 02:52:141

如何使用fragment加载百度地图

  使用fragment加载百度地图的方法直接在Fragment中定义BaiduMap即可。1.Fragment是android3.0引入的新控件,果应用使用在3.0以下、1.6及以上的版本,需要引入v4包。2.Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等。3.Fr期方法依赖于Activity的生命周期,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用。4.FragmentManager提供了对Activity运行时的Fragment的添加、删除、替换的操作。在Activity运行期间可以添加Fragment而不是在XML布局文件中进行定义。如果打算在Activity中改变Fragment的生命过程。如果要执行添加、删除、修改的操作,必须通过FragmentManager的对象获得一个FragmentTransaction对象,通过它的API来执行这些操作。5.两个单独的Fragment之间是不应该进行通信的。应该使用他们所存在的Activity作为沟通的纽带。
2023-07-23 02:52:221

Fragment使用的时候必须要设置id吗

Caused by: java.lang.IllegalArgumentException: Binary XML file line #6: Must specify unique android:id, android:tag, or have a parent with an id for com.example.daojie.sample.fragment.LifeCycleFragment这句话意思就是是说你这个必须要有ID或者tag,或者要有一个有ID的父容器吧。
2023-07-23 02:52:292

求助,fragment通过findFragmentByTag获取到的是空值

1、你没有给相应的fragment设置tag2、当你对fragment进行add eplace emove等操作时,就创建一个transaction然后塞入FragmentManager的执行队列中。这里最坑的地方就是,这队列不会马上执行,你需要executePendingTranscation()才能强制该队列执行。所以一般在某个地方通过getSupportFragmentManager()获得一个fragmentManager时,不要直接findFragmentByTag,而是先getSupportFragmentManager().executePendingTranscation(),然后再findFramgnetByTag,就能找到对应的frament了
2023-07-23 02:52:492

Fragment的两种创建方式

1.自定义一个类FragmentLeft继承系统的Fragment FragmentLeft的布局 2.再自定义一个FragmentRight继承系统Fragment FragmentRight的布局 3.MainActivity MainActivity布局 在main_activity中注册fragment标签 ==注意:它不是一个控件,它是一个引用型的标签== 1.自定义类FragmentLeft继承Fragment FragmentLeft布局 2.自定义FragmentRight继承Fragment FragmentRight布局 3.MainActivity 在activity_main布局里面添加两个LinearLayout用于放Fragment
2023-07-23 02:52:561

在Android开发中fragment有什么优缺点

  自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片、片段。其目的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。  fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity 管理的back stack 中保存些变化。当一个片段指定了自身的布局时,它能和其他片段配置成不同的组合,在活动中为不同的屏幕尺寸修改布局配置(小屏幕可能每次显示一个片段,而大屏幕则可以显示两个或更多)。  Fragment必须被写成可重用的模块。因为fragment有自己的layout,自己进行事件响应,拥有自己的生命周期和行为,所以你可以在多个activity中包含同一个Fragment的不同实例。这对于让你的界面在不同的屏幕尺寸下都能给用户完美的体验尤其重要。  Fragment优点  Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。  Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。  Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。  Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。  Fragment 解决Activity间的切换不流畅,轻量切换。  Fragment 替代TabActivity做导航,性能更好。  Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效果。  Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能。  可以从startActivityForResult中接收到返回结果,但是View不能。    Fragment的生命周期  你可以把fragment看作是activity的模块化组件,它拥有自己的生命周期    Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。  Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),你可以单独地操作每个Fragment,比如添加或删除它们。当你在执行上述针对Fragment的事务时,你可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。    显示Fragment时(跟用户交互)要调用的核心的生命周期方法如下:  1. 把Fragment对象跟Activity关联时,调用onAttach(Activity)方法;  2. Fragment对象的初始创建时,调用onCreate(Bundle)方法;  3. onCreateView(LayoutInflater, ViewGroup, Bundle)方法用于创建和返回跟Fragment关联的View对象;  4. onActivityCreate(Bundle)方法会告诉Fragment对象,它所依附的Activity对象已经完成了Activity.onCreate()方法的执行;  5. onStart()方法会让Fragment对象显示给用户(在包含该Fragment对象的Activity被启动后);  6. onResume()会让Fragment对象跟用户交互(在包含该Fragment对象的Activity被启恢复后)。    Fragment对象不再使用时,要反向回调的方法:  1. 因为Fragment对象所依附的Activity对象被挂起,或者在Activity中正在执行一个修改Fragment对象的操作,而导致Fragment对象不再跟用户交互时,系统会调用Fragment对象的onPause()方法;  2. 因为Fragment对象所依附的Activity对象被终止,或者再Activity中正在执行一个修改Fragment对象的操作,而导致Fragment对象不再显示给用户时,系统会调用Fragment对象的onStop()方法。  3. onDestroyView()方法用于清除跟Fragment中的View对象关联的资源;  4. Fragment对象的状态被最终清理完成之后,要调用onDestroy()方法;  5. 在Fragment对象不再跟它依附的Activity关联的时候,onDetach()方法会立即被调用
2023-07-23 02:53:061

fragment ondetach 什么时候执行

当我们在一个viewpager放一个fragment,当切换viewpager当中的viewpager时,fragment的打印输出如下:1.D:Userszhongxw>adb logcat -s debug--------- beginning of /dev/log/main--------- beginning of /dev/log/systemV/debug (17567): onAttachV/debug (17567): onCreateV/debug (17567): oncreateviewV/debug (17567): onActivityCreatedV/debug (17567): onResume切换到别fragment的时打印出:V/debug (17567): onPauseV/debug (17567): onDestroyView注意执行了onDestroyView进行了销毁,而下面的onCreateView也是进行对应的重新愀复时执行:V/debug (17567): oncreateviewV/debug (17567): onActivityCreatedV/debug (17567): onResume再退出:V/debug (17567): onPauseV/debug (17567): onDestroyViewV/debug (17567): onDestroyV/debug (17567): onDetach2.如果是打开退出两种状态的切换:打开:V/debug (17567): onCreateV/debug (17567): oncreateviewV/debug (17567): onActivityCreatedV/debug (17567): onResume退出是:V/debug (17567): onPauseV/debug (17567): onDestroyViewV/debug (17567): onDestroyV/debug (17567): onDetach3.**我们看到都没有执行onPause函数,onPause()多长发生如果点击fragment中的内容时或者这时弹出别的app或者说是activity,跳转到一个新界面,把当前的fragment盖住了,生命周期通常是这样的:D:Userszhongxw>adb logcat -s debug--------- beginning of /dev/log/system--------- beginning of /dev/log/mainV/debug (17567): onPauseV/debug (17567): onResume跳进入是onPause(),恢复时是onResume()4.如果我们fragment已经展示了,我们按home键进入后台,再进入前台,则执行:A。进入后台V/debug (22269): onPauseB,恢复前台V/debug (22269): onResume我们看到这里前没有执行onDestroy(),没有销毁,所以也没有执行onCreateView()进行重绘。跟前面3中所描述的切换到别的activity中是一样的效果。这里我没有打印onStart()跟onStop()函数,,因为onResume以前一定会执行onStart(),在onPause后也会执行onStop()这个函数
2023-07-23 02:53:191

android中fragment中 怎么切换竖屏

两个按钮,1和2不要放到fragment里面,放到activity布局中,这样2个按钮都和fragment没关系。这样这2个按钮只有切换的功能了。
2023-07-23 02:53:272

求铃田美夜子的《Fragment》 歌词的中文翻译

凝望蓝色星星张开手的你 温情的笼着我喂~,听到了吧那遥远夏日的企盼 温柔的片段多少次清晨 你都是在我身旁 羞涩的眯起了眼睛这双手中能拥住的只是一点点可永远都感觉 是那么纯真无邪内心深处又不一样啊啊 我能够好好守护你么不安又害怕 可又满怀爱恋我们的声音绽放出比星星还耀眼的光辉喂~,听到了吧那遥远夏日的企盼 温柔的片段雨声中你低下了头泪也流不出来的 咬着嘴唇乞求一样的眼神 一句谎言“我不在乎”颤抖着眼睑背过身不再回头的背影如果能再给些勇气就能相依相偎 紧紧拥抱。。 低声地哭泣天空中万千次眨眼闪烁 编织着小小的希望喂~收到了么 那个遥远夏日企盼的温暖片段我们的声音依然不变绽放出耀眼的光辉喂~ 看得见吧那遥远夏日的企盼 温柔的片段凝望蓝色星星张开手的你 温情的笼着我喂~ 听得到吧那遥远夏日的企盼 温柔的残片此刻 你也在奏响
2023-07-23 02:53:341

请教高手:Fragment (consider revising),怎么解决?

微软的自动纠错会下划波浪线,单词拼写错误时波浪线就在该单词下面,Fragment(consider revising)是表示微软认为你写的只是一个片段,不构成一个完整的句子——其实很多时候这都是误判,句子是正确的也会有这个情况,一般不用管的;如果实在看这个不爽的话,右键,点 忽略一次 就可以了补充:改正的话看情况了,可能确实你一个句子是写错了,那样的话当然你把句子改正确就可以了;有时候其实你的句子是对的,机器毕竟只是机器,判断力不可能绝对正确的最简单的一个例子,你输入"Sino-US relation is very important." Said Hu Jingtao, China"s chairman. 这个句子肯定是正确的,但是微软还是会对Said Hu Jingtao, China"s chairman划错,说是Fragment(consider revising),算是误报吧。波浪线上右键 忽略一次 就行了
2023-07-23 02:53:421

fragment中怎样getIntent()

Fragment中没有getIntent方法,需要通过Activity来。可以这样实现:Intent intent = getActivity().getIntent();这样就可以在fragment中获取Activity的Intent
2023-07-23 02:53:501

android 怎么通知回退栈中的fragment刷新

到的问题:通过FragmentTransaction的replace方法会导致,每次都会重新调用fragment的onCreateView()方法,浪费时间。解决方法:通过FragmentTransaction的hide和show方法来实现fragment的显示和隐藏,这样就不会重复调用onCreateView函数了。FragmentTransactioin 可以用来添加,删除fragment,也可以控制fragment的显示和隐藏。这是如果调用addToBackStack(null),此时的状态就会被保存在回退栈,按返回键的时候就会显示出栈顶的getSupportFragmentManager().popBackStack() 这个方法可以让栈顶的fragment出栈。只有在程序运行时被动态添加的fragment才会被添加到后退栈。 getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, newFragment,"testa") .addToBackStack(null) .commit(); 程序跑起来之后,通过这个方法后退栈数才会加一,如果在代码中一口气添加多个,再运行程序,getSupportFragmentManager().getBackStackEntryCount()得到的后退栈数值为零。
2023-07-23 02:54:101

Fragment 数据懒加载及原理

最近据后台同事反馈说,某些接口调用的频率有点高,而这块业务还没完全开放,照理说很少会用到,于是让我查查怎么回事。 我看了下日志,把网络请求日志过滤出来,发现的确有问题,每次打开首页后都有许多那块业务相关的网络请求。于是马上联想到可能是因为首页改版之后嵌套使用了 ViewPager,业务未完全开放的那个 fragment 里嵌套了一个 ViewPager,里面有多个 fragment,这样每次打开首页都会去加载该 page,然后是一连串的 fragment 初始化以及网络请求,所以为了解决该问题就不得不使用懒加载。 最终想要实现的效果是:1) 当 fragment 不可见的时候不加载数据;2) 当数据已经加载过之后,除非手动刷新否则不重新请求数据。 首先,默认情况下,由于 ViewPager 会预加载左右两边相邻的 至少 1 个 fragment,通过 setOffscreenPageLimit() 设置预加载 page 数为 0 并不会起作用,这点从 ViewPager 的源码中可以看到: 从以上源码可以看出相邻 fragment 的加载是必然的,但是我们如果可以得知 fragment 可见性,那么就可以在 fragment 可见时才去加载数据。这样虽然不是完全的懒加载,只是数据懒加载,但是同样也可以满足我们的需求了。 那么 fragment 中有没有可以获取当前 fragment 是否可见的方法呢,当然是有的,它就是 setUserVisibleHint(boolean isVisibleToUser) 。 无论你使用的是 FragmentPagerAdapter 还是 FragmentStatePagerAdapter,当它们初始化 fragment 的时候,该方法都会被调用两次。 一次是在实例化的时候,也就是在 instantioateItem() 方法中: 一次是在用户滑动到当前 fragment 的时候,在 setPrimaryItem() 方法中: 另外,当用户从当前 fragment 滑出的时候,setPrimaryItem() 方法也会被调用。 来看下 setUserVisibleHint() 的注释: 系统正是通过该方法来判断当前 fragment 的 UI 是否对用户可见,而该方法被暴露出来的主要目的也是让我们可以提醒系统当前 fragment 已经不可见了,是时候重新更新 fragment 的生命周期了。 不过如果只是实现数据懒加载,我们不需要直接去调用该方法,只要覆写它并实现控制数据加载的逻辑就可以了。 这里我参考了一种比较简便的做法,原文来自 尹star 的 ViewPager+Fragment LazyLoad 最优解 。 实现效果: lazy_load_fragment_demo 项目地址: aJIEw/DemoUI-LazyLoadFragment 可以看到只有第一次进入 fragment 的时候才会加载数据,而且也不会主动加载相邻的 fragment 或者已经加载过的数据了。 首先,由于 setUserVisibleHint() 会在 fragment 实例化时就先被调用 (在 onAttach() 之前),所以我们最好在 view 创建完毕之后加载数据,因此需要设置一个 view 是否初始化完毕的标志位。另外,当然也需要一个 view 是否可见的标志位,只有等到 view 可见才允许加载。然后还可以选择保存数据的初始化状态,这样可以控制在 fragment 生命周期中的合适时机重新加载数据。所以,我们需要以下 3 个标志位: 然后接下来分为两种情况,一种是 view 初始化完毕但是此时还不可见的情况。很显然,我们只要判断 setUserVisibleHint() 中参数的值就可以了: 还有一种情况是,如果当前 fragment 是整个 ViewPager 的第一个 fragment,那么 setUserVisibleHint(true) 会在 view 初始化之前就在 setPrimaryItem() 中被调用,此时 view 已经可见了,但是我们要等到 view 初始化才加载数据,所以我们要在某个地方判断 view 是否已经初始化并且去加载数据。 最好的地方是在 onActivityCreated() 中。根据 fragment 生命周期我们知道,onActivityCreated() 会在 onCreateView() 之后调用,此时 view 已经初始化完毕,我们可以在这里将 isViewInitiated 标记为 true,同时在这里为第一个显示的 fragment 加载数据: 最后,我们还需要判断下数据是否已经加载过,避免重复加载。 我们将以上所有判断逻辑写在 prepareFetchData() 中,判断条件为 view 已经初始化、可见且数据未加载: 最后再定义一个抽象方法 fetchData(),让子类去实现: 这样一个完整的数据懒加载就实现完毕了。 我们可以看下以上操作的日志来验证下我们的想法。 第一次打开,FirstFragment 作为第一个可见的 fragment 立马被初始化: 此时 isVisibleToUser 会在 isViewInitiated 之前设为 true,所以 FirstFragment 会在 onActivityCreated() 中真正开始获取数据。 另外,由于预加载的存在,SecondFragment 也会被创建,但是此时还不可见: 当滑动到 SecondFragment 的时候,SecondFragment 状态变为可见,setUserVisibleHint(true) 被调用,所以开始获取数据: 而此时 FirstFragment 由可见变为不可见: ThirdFragment 则开始第一次被创建,同样此时并不可见: 当滑动到 ThirdFragment 的时候,状态变为可见,所以也就开始获取数据: 此时 SecondFragment 由可见变为不可见: 而 FirstFragment 由于超出了 ViewPager 可以保存的 Fragment 的数量,所以被销毁: 此时 SecondFragment 重新变得可见: 而 FirstFragment 也开始重新被创建: 此时 FirstFragment 重新变得可见,虽然 FirstFragment 之前被销毁了,但是由于之前获取的数据会被恢复,所以现在不会重新去获取数据: 当然我们也可以选择在 onDestroy() 中将 isDataInitiated 置为 false,这样每次 fragment 重新创建都会重新获取数据。当然前提是你使用的是 FragmentStatePagerAdapter ,因为如果使用 FragmentPagerAdapter ,不会每次都调用 onDestroy(),fragment 实例会被保存。而 SecondFragment 再次变得不可见,ThirdFragment 被销毁,过程与 3 中移动到 ThirdFragment 类似,这里就不截图了。 通过以上日志,验证了我们的想法是对的。 另外,如果是 ViewPager 嵌套 ViewPager 其实效果也是一样的,如果不做特殊处理,相邻的 fragment 的会被加载,导致该 fragment 中的 ViewPager 会去加载其中的 fragment。
2023-07-23 02:54:181

深刻的理解Fragment生命周期 都在做什么,fragment生命周期

1. Fragment是android3.0引入的新控件,果应用使用在3.0以下、1.6及以上的版本,需要引入v4包。 2. Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等。 3. Fragment的生命周期方法依赖于Activity的生命周期,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用。 4. FragmentManager提供了对Activity运行时的Fragment的添加、删除、替换的操作。在Activity运行期间可以添加Fragment而不是在XML布局文件中进行定义。如果打算在Activity中改变Fragment的生命过程。如果要执行添加、删除、修改的操作,必须通过FragmentManager的对象获得一个FragmentTransaction对象,通过它的API来执行这些操作。
2023-07-23 02:54:261

如何在Fragment中获取FragmentActivity中的布局

可以通过getActivity()来得到FragmentActivity对象,但是建议不要在Fragment中去操作FragmentActivity的东西,建议在FragmentActivity中封装一些方法。1.Fragment是android3.0引入的新控件,果应用使用在3.0以下、1.6及以上的版本,需要引入v4包。2.Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等。3.Fr期方法依赖于Activity的生命周期,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用。4.FragmentManager提供了对Activity运行时的Fragment的添加、删除、替换的操作。在Activity运行期间可以添加Fragment而不是在XML布局文件中进行定义。如果打算在Activity中改变Fragment的生命过程。如果要执行添加、删除、修改的操作,必须通过FragmentManager的对象获得一个FragmentTransaction对象,通过它的API来执行这些操作。5.两个单独的Fragment之间是不应该进行通信的。应该使用他们所存在的Activity作为沟通的纽带。
2023-07-23 02:54:331

在xml中引入fragment怎么传递参数

你把参数传递到另一个Activity,在intent中指明要传给哪几个Fragment,由Activity再将参数传给你指定的Fragment
2023-07-23 02:54:401

Fragment使用的时候必须要设置id吗

1、Fragment的产生与介绍Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。2、Fragment的生命周期Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。官网这张图很好的说明了两者生命周期的关系:可以看到Fragment比Activity多了几个额外的生命周期回调方法:onAttach(Activity)当Fragment与Activity发生关联时调用。onCreateView(LayoutInflater, ViewGroup,Bundle)创建该Fragment的视图onActivityCreated(Bundle)当Activity的onCreate方法返回时调用onDestoryView()与onCreateView想对应,当该Fragment的视图被移除时调用onDetach()与onAttach相对应,当Fragment与Activity关联被取消时调用注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现,3、静态的使用Fragment嘿嘿,终于到使用的时刻了~~这是使用Fragment最简单的一种方式,把Fragment当成普通的控件,直接写在Activity的布局文件中。步骤:1、继承Fragment,重写onCreateView决定Fragemnt的布局2、在Activity中声明此Fragment,就当和普通的View一样
2023-07-23 02:54:481

在afragment 写了弹窗方法不显示,在bfragment才出现是怎么回事

1.fragment嵌套fragment时出现getActivity()为nullactivity A嵌套fragment B,B嵌套fragment C,C跳转到activity D,当activity D被finish掉之后,C中容易爆出getActivity为空.如果你的activity被回收了,那你需要在bundle中保存一下fragment信息,我的解决方法:fragment实例化之后会到activity的fragmentManager中注册一下,这个动作封装在fragment中的onAttach(Activity activity)方法中,可以直接在onAttach(Activity activity)方法中去赋值2.fragment嵌套fragment时没有执行子fragment的onActivityResult方法activity A嵌套fragment B,B嵌套fragment C,C通过startActivityForResult跳转到activity D,当activity D被finish掉之后,没有执行C的onActivityResult其实这个问题也不是每个人都会遇到,当activity A和Fragment B不重写onActivityResult方法,可能就不会出现这个问题,但是我的activity A重写了onActivityResult方法,所以当activity D被销毁的时候,直接去执行activity 的onActivityResult,其实这个问题也很简单,只是遇到的时候可能想不到,解决方案就是在Activity中的onActivityResult方法中加入super.onActivityResult(requestCode, resultCode, data);一切都ok了Activity的onActivityResult方法:protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);fragment的onActivityResult方法:public void onActivityResult(int requestCode, int resultCode, Intent data) {
2023-07-23 02:54:551

如何获取fragmentmanager

ViewPager中如何获取Fragment  在做项目时,遇到Fragment与Fragment、Fragment与Activity需要相互通信、传递数据以及进行互  操作的问题,查阅了官方文档,也实现了官方的例子,但实际项目是ViewPager+Fragment,按官方的例  子,总是获取不到Fragment的引用,如:  HeadLinesFragment headLinesFrag = (HeadLinesFragment)   getSupportFragmentManager().findFragmentById(R.id.headline_fragment);  这是因为在ViewPager里Fragment是new出来动态加到ViewPager里的,上需的Id只是Fragment的布  局文件的根Id,不是Fragment 的Id,故获取的Fragment为空  查询相关资料后,终于找到如下解决方案:  一般来讲,我们再使用viewpager的时候,是在代码中动态的添加fragment。此时,我们不能去指定  fragment的id,也不能指定他的tag,如果你一定要去指定tag,运行时会提示,tag已经被指定。那么,在动  态的添加了fragment之后,我们如何能获取到该fragment并修改其中的内容呢。两种方法:  第一种方法实际上是一种hack方法,并没有官方文档说明支持。代码如下:  SomeFragment someFragment = getSupportFragmentManager().FindFragmentByTag(“android:switcher:” + R.id.viewpager + “:0″);  if (someFragment != null) //可能没有实例化  {  if (someFragment.getView() != null)  {  someFragment.updateView();//自定义方法更新  }  }  这里要记住的就是”android:switcher:” + R.id.viewpager + “:0″ 这个字符窜表示的就是该  fragment的tag,其中0 是fragment 在viewpager中的位置。  第二种方法更正规,因为第一种方法对基于FragmentPagerAdapter的实现是有效的,但对于  FragmentStatePagerAdapter就无效了。因为FragmentStatePagerAdapter不会对传给  FragmentManager的Fragment设置tag.  ViewPager pager = (ViewPager)findViewById(R.id.viewpager);  FragmentStatePagerAdapter f = pager.getAdapter();  SomeFragment someFragment = (SomeFragment)f.instantiateItem(pager,position);  instantiateItem(pager,position)方法会返回在position位置的fragment的引用。如果该  fragment 已经实例化了,再次调用instantiateItem(pager,position)的时候,该方法并不会调用  getItem()来再次实例化fragment,而是直接返回引用。  方法三更简单:  Activity里的语句:  mPagerAdapter = new DownloadSlidePagerAdapter(getSupportFragmentManager());  LocalVideoListFragment fragment = ((LocalVideoListFragment)mPagerAdapter.getItem(mCurrItem));  fragment.refresh();  DownloadSlidePagerAdapter:  public class DownloadSlidePagerAdapter extends FragmentPagerAdapter {  Fragment[] fragments = {new DownloadListFragment(),new LocalVideoListFragment()};  public DownloadSlidePagerAdapter(FragmentManager fm) {  super(fm);  }  @Override  public Fragment getItem(int position) {  return fragments[position];  }  @Override  public int getCount() {  return fragments.length;  }  }  直接获取new的实例对象应用
2023-07-23 02:55:031