问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

继承frament和activity的区别

发布网友 发布时间:2023-10-09 11:42

我来回答

1个回答

热心网友 时间:2024-10-22 14:27

一、为什么要使用Fragment
1、当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块。在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变。在4.0或以上系统中就可以使用新的特性来方便的达到这个效果--Fragment类。Fragment类似一个嵌套Activity,可以定义自己的layout和自己的生命周期。

2、 多个Fragment可以放在一个Activity中(所以上面讲到类似一个嵌套Activity),而这个类可以对这些Fragment进行配置以适应不同的屏幕尺寸(比如平板和手机)。

二、使用Fragment
1、Fragment 是 activity 的界面中的一部分或一种行为。可以把多个 Fragment 组合到一个 activity 中来创建一 个多面界面并且可以在多个 activity 中重用一个 Fragment。可以把 Fragment 认为模块化的一段 activity,它具 有自己的生命周期,接收它自己的事件,并可以在 activity 运行时被添加或删除。
2、Fragment 不能独立存在,它必须嵌入到 activity 中,而且 Fragment 的生命周期直接受所在的 activity 的影 响。
3、当向 activity 中添加一个 Fragment 时,它须置于 ViewGroup 控件中,并且需定义 Fragment 自己的界面。可 以在 layoutxml 文件中声明 Fragment,元素为:<fragment>;也可以在代码中创建 Fragment,然后把它加入到 ViewGroup 控件中。然而,Fragment 不一定非要放在 activity 的界面中,它可以隐藏在后台为 actvitiy 工作。

三、 生命周期
通常, 应当至少实现如下的生命周期方法:
onCreate()
当创建fragment时, 系统调用该方法.

在实现代码中,应当初始化想要在fragment中保持的必要组件, 当fragment被暂停或者停止后可以恢复.
onCreateView()
fragment第一次绘制它的用户界面的时候, 系统会调用此方法. 为了绘制fragment的UI,此方法必须返回一个View, 这个view是你的fragment布局的根view. 如果fragment不提供UI, 可以返回null.

onPause()
用户将要离开fragment时,系统调用这个方法作为第一个指示(然而它不总是意味着fragment将被销毁.) 在当前用户会话结束之前,通常应当在这里提交任何应该持久化的变化(因为用户有可能不会返回).
大多数程序应最少对 fragment 实现这三个方法。当然还有其它几个回调方法可应该按情况实现之。
下图为 fragment 的生命周期(它所在的 activity 处于运行状态)。

四、如何使用Fragment
1、添加一个用户界面
fragment通常用来作为一个activity的用户界面的一部分,并将它的layout提供给activity.为了给一个fragment提供一 个layout,你必须实现 onCreateView()回调方法, 当到了fragment绘制它自己的layout的时候,Android系统调用它.你的此方法的实现代码必须返回一个你的fragment的 layout的根view.
从onCreateView()返回的View, 也可以从一个layout的xml资源文件中读取并生成. 为了帮助你这么做, onCreateView() 提供了一个LayoutInflater 对象.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frament_main, container, false);
return view;
}
PS
传入onCreateView()的container参数是你的fragmentlayout将被插入的父ViewGroup(来自activity的layout) savedInstanceState 参数是一个Bundle, 如果fragment是被恢复的,它提供关于fragment的之前的实例的数据,
inflate() 方法有3个参数:
a、想要加载的layout的resource ID.
b、加载的layout的父ViewGroup.传入container是很重要的, 目的是为了让系统接受所要加载的layout的根view的layout参数,由它将挂靠的父view指定.
c、布尔值指示在加载期间, 展开的layout是否应当附着到ViewGroup (第二个参数).
2、将fragment添加到activity
通常地, fragment为宿主activity提供UI的一部分, 被作为activity的整个viewhierarchy的一部分被嵌入. 有2种方法你可以添加一个fragment到activity layout:
2.1、使用XML将Fragment添加到一个Activity中
在这种情况下,你可以像为View一样, 为fragment指定layout属性。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
PS
1、<fragment> 中的 android:name属性指定了在layout中实例化的Fragment类.
当系统创建这个activity layout时,它实例化每一个在layout中指定的fragment,并调用每一个上的onCreateView()方法,来获取每一个 fragment的layout.系统将从fragment返回的 View直接插入到<fragment>元素所在的地方.
2、通过在xml中定义fragment的方式,我们不能在运行时移除fragment。如果我们想要通过切换fragments来跟用户有更好的互动,那么就需要在activity启动的时候定义fragment了。
2.2、在运行时添加一个Fragment到Activity
上面一节的在activity的布局文件(layout xml)中添加Fragment的方法我们已经知道了。现在我们将学习另外一种方式,这种方式允许我们在运行时动态的显示和隐藏fragment。为了达到在activity中动态管理Fragment,我们需要用到FragmentManager,并且通过它创建FragmentTransaction。

activity允许移除或者替换fragment需要有如下条件:
1、activity的onCreate()方法中添加初始化的fragment
2、fragment放置位置的布局中必须有一个视图容器

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Activity中使用getSupportFragmentManager()获取FragmentManager,之后调用beginTransaction去创建一个FragmentTransaction对象, 再调用add()方法即可添加一个fragment。 在activity中可以使用同一个FragmentTransaction对象去执行多个fragment事务,当做这样操作时,必须调用commint()方法。 下面的代码演示怎样添加一个fragment到res/layout/news_articles.xml的layout:
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);

if (findViewById(R.id.fragment_container) != null) {

if (savedInstanceState != null) {
return;
}

HeadlinesFragment firstFragment = new HeadlinesFragment();

firstFragment.setArguments(getIntent().getExtras());

// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
快手极速版怎么绑定不了微信? 本班数学期中测试的优秀率是50%是什么意思 期中测试中全班56名同学有42人达到了优秀标准熊启中是稠剂的优秀率是... 期中测试中,全班56名同学,有49跟达到了优秀标准,求期中测试的优秀率是... 东瓜怎样吃,是减肥的最佳效果呢? 木耳冬瓜瘦肉汤怎么做味道极佳? 黑木耳冬瓜肉末汤美食做法 和前男友分手一年多了,也没联系过,怎么昨晚突然梦到他,而且感觉好真实... 面对分手两年多后的前男友,我应该怎么办 ...了微信但不说话,相亲女加了微信却不聊天,这是什么心态?_百... 不思议迷宫试炼之地怎么过4 不思议迷宫试炼之地怎么过?通关攻略4 帮忙解释镁光内存条上字母代表的含义。尤其是要告诉下频率是多少...5 怎么看自己的内存频率48 内存条型号上的数字 频率 是表示最大频率吗 有什么好的涂鸦工具吗? 用来涂图的,(手机软件)4 亲!可以在手机屏幕上涂鸦的软件有吗?谢谢了!3 有没有比较好用的专门用于手机照片涂鸦的软件?就是可以选择手机...1 一个女人抖音一会公开一会私密,是分手后想引起那个男人都注意嘛?_百 ... EXCEL单元格里数值等于另一个单元格,没有数值的时候不要显... 有没有可以在任何软件里涂鸦的工具,安卓版的 ...就不能说话了只能自由,改建我都改了好多了就是不能按键说话... Excel如何把表格中男女性别分开计数,分开男女分别统计报考... 跪求骑马与砍杀1.126破解补丁啊 我 的 邮箱118171...4 安卓手机有没有一个好用的涂鸦软件? excel表格 怎么把性别一列里的数字1改成男 , 数字2改... 求骑马与砍杀 战团 1.132 的 破解补丁。 邮箱:zml...3 安卓系统的手机涂鸦软件叫什么名字1 骑马与砍杀战团1.126 Excel计算一列数据中两个相同单元格之间1和0的个数 不思议迷宫天空战试炼之地通关攻略 试炼之地怎么打5 安装知识搭、拆脚手架时施工操作人员必须佩戴哪些防护用品? Android中继承AppCompatActivity和直接... 火试炼通关方法 不思议迷宫地狱火试炼怎么打3 工程施工搭、拆脚手架时作业人员必须佩戴哪些防护用品?1 android 怎么在其他activity中杀死主activ... 施工脚手架从事脚手架搭设人员应佩戴哪些防护用品?1 android 怎么activity跳转本activity 从事脚手架架设人员应佩戴哪些防护用品5 android 如何在一个Activity里结束指定的Act... 安装知识电动吊篮施工操作人员必须佩戴哪些防护用品? android 怎么从activity跳到另一个activi... 工程施工电动吊篮作业人员必须佩戴哪些防护用品?6 橙子焦糖组合里的人分别叫什么1 韩国和橘子焦糖类似的组合有哪些?2 谁知道这个韩国组合叫什么?1 橘子焦糖被羊玩坏的那首歌叫什么1 有时人的手会发抖,这是怎么回事啊10 有没有喜欢橘子焦糖组合的?2 手会发抖是怎么回事啊403