关于Fragment学习小结
来源:互联网 发布:苏联生活水平数据 编辑:程序博客网 时间:2024/06/05 05:29
一、前期问题
我想要实现类似微信底部标签的切换功能(如下图),在之前没接触fragment的时候,第一的想法是在activity之间互相跳转,但是这样不仅会使底部标签这一部分的代码重复,而且增加开销,所以在这里使用fragment是很合适的。
二、fragment和Activity的关系
fragment代表activity工作,他的状态应该反映activity的状态。fragment的生命周期是由activity托管而不是操作系统调用。
fragment的完整生命周期如下:
onAttach→onCreate→onCreateView→onStart→onResume(可见状态)
→onPause→onStop→onDestory→onDetach
三、fragment的使用
- 在activity的布局文件中为fragment安排位置(activity_main.xml)
<!--这里相当于我把整一个屏幕托管给了fragment--><?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_frag" <!--命名为了fragment能够找到其布局--> android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white"></RelativeLayout>
- 新建fragment的布局xml文件(fragment_test.xml)
<!--简单的在布局里加了一个TextView--><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/hello_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/black" android:text="hello_world"/></RelativeLayout>
- 创建Fragment类,加载Fragment布局(testFragment.java)
public class testFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //加载fragment的布局 View view = inflater.inflate(R.layout.fragment_test, container, false); /* 加载控件以及实现逻辑功能都在onCreateView()中实现,而不是onCreate(); */ return view; }}
- 将fragment添加到activity中
public class FrontPage extends FragmentActivity { private Fragment fragment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment_front); /*fragment注册*/ //FragmentManger管理着fragment事务的回退栈 FragmentManager fm = getSupportFragmentManager(); //加载其在activity布局中的位置 fragment = fm.findFragmentById(R.id.activity_frag); fm.beginTransaction(). //beginTransaction()返回FragmentTransaction实例 add(R.id.page_content, firstPage). //向队列中添加fragment commit(); //最后提交}
四、fragment的切换方法(介绍两种)
1、此方法原fragment依旧会保持resume状态
fragmentManager.beginTransaction().hide(fragment1).show(fragment2).commit();
2、 此方法下原fragment会被销毁
Fragment fragment = new Fragment2();//获取Fragment事务实例FragmentTransaction transaction = getFragmentManager().beginTransaction();//用replace方式替换,transaction.replace(R.id.page_content,fragment);
五、例子
git例子链接
小结
参考《android编程权威指南》以及自己在实际运用时的感悟写下此记录,如有错误欢迎指正
0 0
- 关于Fragment学习小结
- Fragment 学习小结
- Android Fragment学习小结
- Fragment学习小结
- 关于Android中的Fragment个人小结
- 关于线程学习小结
- Fragment小结
- fragment小结
- fragment小结
- fragment小结
- fragment小结
- Fragment小结
- Fragment小结
- Fragment小结
- Fragment小结
- Fragment小结
- 关于今天学习的小结
- 关于JQ的学习小结
- 如何使用Notification的相关Style实现不同类型的Notification
- 道
- 响应式web设计——读书笔记
- java基础技术知识点总结——基本数据类型、引用、常量
- 保龄球得分计算
- 关于Fragment学习小结
- Android一些简单记录
- 洛谷 1680 奇怪的分组
- FileUpload组件(文件上传下载)
- maven dependencies已经引入了相应jar包,java编译的时候依然找不到类
- jquery中attr和prop的区别
- C++实验6——数组2
- 项目在多个Git之间迁移后,造成maven依赖包找不到
- git服务器搭建