文档章节

Android第四十二天

黄晓磊
 黄晓磊
发布于 2016/07/26 21:39
字数 870
阅读 34
收藏 0

1、Fragment的简单使用

        <1>Fragment:在Activity中使用的碎片,有自己的布局、生命周期和输入事件

        <2>使用Fragment的步骤

                (1)创建类,并继承Fragment;


public class FirstFragment extends Fragment{
}

                (2)重写Fragment的onCreateView()生命周期方法,并返回一个View;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO 加载fragment视图(两种方法,推荐使用第二种)
//View view = inflater.inflate(R.layout.first_fragment, null);

View view2 = inflater.inflate(R.layout.first_fragment, container, false);

TextView textView = (TextView) view2.findViewById(R.id.textView);

//返回加载的视图对象
return view2;

                (3)使用fragment的两种方法

                        a.在布局文件中使用<fragment android:name="自定义Fragment的类路径"/>保证碎片显示唯一:id/tag


<fragment
android:id="@+id/firstFragment"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_below="@id/tv"
android:name="com.qf.day12demo01.FirstFragment"
/>

                        b.动态添加

                                1.获取到一个fragment管理器对象


FragmentManager manager = getFragmentManager();

                                2.通过这个管理器对象要开启一个事务


FragmentTransaction transaction = manager.beginTransaction();

                                3.把预留在布局中的位置,换成要展示的碎片对象


transaction.replace(R.id.replaceId, new SecondFragment());

                                4.提交事务      


transaction.commit();

          <3>使用FragmentManager

                (1)作用:管理多个Fragment之间的交互和传值

                (2)Activity.getFragmentManger()         3.0以后

                (3)FragmentActivity.getSupportFragmentManager() 3.0以前,引用v4包

                (4)FragmentTransaction beginTransaction() 获取Fragment事务处理对象

        <4>s使用FragmentTransaction

                (1)replace(int containerViewId, Fragment fragment)    把预留在布局中的位置,换成要展示的碎片对象

                (2)commit()     提交本次事务处理

3、Fragment的生命周期

        <1>11个生命周期方法

                (1)onAttach(Activity)  连接宿主Activity

                (2)onCreate(Bundle)  创建Fragment

                (3)onCreateView(LayoutInflater, ViewGroup, Bundle)创建Fragment视图

                (4)onActivityCreated(Bundle) 当宿主Activity的onCreate()执行完之后调用

                (5)onStart() 

                (6)onResume() 

                (7)onPause()

                (8)onStop() 

                (9)onDestroyView() 销毁Fragment视图,与onCreateView对应

                (10)onDestroy()  销毁Fragment,与onCreate对应

                (11)onDetach() 与宿主Activity断开连接,与onAttach对应

        <2>生命周期流程

                (1)当Activity创建时,调用Fragment的onAttach->onCreate->onCreateView->onActivityCreated

                (2)当Activity启动时,调用Fragment的onStart

                (3)当Activity获取焦点时,调用Fragment的onResume

                (4)当跳转到另一个Activity时,调用Fragment的onPause-->onStop

                (5)当返回Activity时,调用Fragment的onStart->onResume

                (6)销毁Activity时,调用Fragment的onDestroyView->onDestory->onDettach

3、Fragment与Activity之间的传值

        <1>Activity-->Fragment

                (1)在activity中添加碎片的时候,通过碎片对象的.setArgments(bundle)


public void btnSendMsg(View view){
TextView tv_top = (TextView) findViewById(R.id.tv_top);
tv_top.setText(content+new Date());


FragmentTransaction transaction = manager.beginTransaction();
bottomFragment = new BottomFragment();
Bundle bundle = new Bundle();
bundle.putString("msg", content+new Date());
//把碎片对象和要传递的数据绑定
bottomFragment.setArguments(bundle);
transaction.replace(R.id.replaceId, bottomFragment);//替换的碎片对象中是绑定有数据的
transaction.commit();

}

                (2)在fragment里面,通过getArgments();得到一个bundle对象,再从bundle对象里面获取内容



Bundle bundle = getArguments();
if (bundle != null) {
String msg = bundle.getString("msg");
tv_bottom.setText(msg);
}

        <2>Fragment-->Activity

                (1)在activity中声明一个公共的方法,在这个方法中必须要有一个参数(参数类型就是要传递的数据类型)


public void setContent(String s){
tv_main.setText(s);
}

                (2)在fragment里面,通过getActivity(),可以获取到宿主activity对象,再调用宿主对象中到提供的公共方法,把数据传递在这个方法中


@Override
public void onClick(View v) {
// TODO 向宿主activity传值

//获取到当前碎片所在的宿主activity对象
MainActivity activity = (MainActivity) getActivity();
activity.setContent(content+new Date());

}

                (3)Activity方式

                        1.在Activity中获取Fragment中的UI控件,并增加相关事件

                        2.在Activity声明公共方法,在Fragment中调用getActivity()并强转,则可以调用公共方法向其他Fragment控件传值

                        3.获取assests下的文件流      InputStream is = getResources().getAssets().open("day01.txt");

© 著作权归作者所有

共有 人打赏支持
黄晓磊
粉丝 20
博文 51
码字总数 45039
作品 0
成都
Android第三十二天

1、什么是View? <1>所有高级UI组件都继承View类而实现的; <2>一个View在屏幕上占据一块矩形区域; <3>负责渲染; <4>负责处理发生的事件; <5>设置是否可见; <6>设置是否可以获得焦点等 ...

黄晓磊
2016/07/13
21
0
《老罗Android开发视频教程》老罗来交国庆的答卷了

  之前在博客园、开源中国、安卓巴士发表的《老罗将死,或者Android也将就换代,但是互联网的,共享,互助精神将永存》,计划出300集免费的、高质量的、全面的Android开发视频教程,得到了...

qixinghaitang
2012/10/09
0
2
大三学生,关于一个javaWeb项目心情很堵,想和前辈们聊聊。。。。

最近有一个老师给了一个项目让我做,而且很急,规定十二天做完,我是第一次做有专门的需求分析的项目,说实在的,老师给的那个需求分析,很多很多东西都没有说清楚,由于是给客户做的,我也不...

上帝爱众生
2014/12/28
31
1
使用AutoCompleteTextView控件的步骤

第一步:在布局文件中定义控件 <AutoCompleteTextView android:id="@+id/actv" android:layoutwidth="fillparent" android:layoutheight="wrapcontent" /> 第二步:在Activity中引用 AutoCo......

罗森
2012/12/14
0
0
[安卓教学] 创建你的第一个安卓应用 - 课程介绍

因为最近在写一个Android App,需要看Google的Android文档,发现他们并没有提供中文文档。感觉不是很重视中国的开发者。本着为了弘扬中国文化(不是非得英文好才能成为好开发)的态度,打算翻...

夜游长空
2014/03/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

df和du命令 磁盘分区

9月25日任务 4.1 df命令 4.2 du命令 4.3/4.4 磁盘分区 df 命令 查看系统磁盘空间使用情况 常用参数 -h (human-readble) # 人性化的为空间大小转换单位显示[root@centos7 ~]# df -h文件系...

robertt15
29分钟前
3
0
【a&sAI创新】华为CloudIVS轻量云:借力打力,四两拨千斤

[摘要] 1、测评表现就目前来说,AI的门槛还是比较高的,业内所熟知的算法企业,为了追求算法的极致,比如人脸识别公司,仍在不断扩大研发...   1、测评表现   就目前来说,AI的门槛还是比...

yizhichao
45分钟前
2
0
安卓安装APK报错error: INSTALL_FAILED_UPDATE_INCOMPATIBLE

记录一个 DELETE_FAILED_INTERNAL_ERROR Error while Installing APK问题 之前遇到这个问题 方案1 将data/data/目录下该应用的包名的目录删除掉,如:adb shell rm -rf data/data/com.demo.h...

切切歆语
46分钟前
1
0
用网关zuul时,熔断hytrix里面的坑

1,zuul 默认的隔离级别是信号量,默认最大隔离信号量是100 信号量隔离和线程池隔离的区别如下: https://my.oschina.net/u/867417/blog/2120713 默认设置: 2,zuul里隔离是按服务隔离的,也...

爱吃大肉包
46分钟前
0
0
使用SSM+Solr优雅的实现电商项目中的搜索功能

在学习了Redis&Spring-Data-Redis入门和Solr&Spring-Data-Solr入门后,接下来就该是项目实战了。这次我们用Vue.JS和ElementUI写前端页面,优雅的整合SSM-Shiro-Redis-Solr框架。 手摸手教你优...

TyCoding
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部