android fragment解析
1、fragment加载到Activity
(1)、添加fragment到Activity的布局文件
(2)、动态在activity中添加fragment
例子:
// 步骤1:获取FragmentManager
FragmentManager fragmentManager = getFragmentManager(); // 步骤2:获取FragmentTransaction
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // 步骤3:创建需要添加的Fragment
final mFragment fragment = new mFragment(); // 步骤4:动态添加fragment
// 即将创建的fragment添加到Activity布局文件中定义的占位符中(FrameLayout)
// FragmentTransaction add = fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.add(R.id.fragment_container,fragment,"ssss");
fragmentTransaction.addToBackStack("ssss")
fragmentTransaction.commit();
2、FragmentPagerAdapter和FragmentStatePagerAdapter的区别
FragmentPagerAdapter适用于页面较少的情况,而FragmentStatePagerAdapter适用于页面较多的情况
因为在源码中FragmentStatePagerAdapter中的destroyItem中用了remove方法回收内存
而FragmentPagerAdapter中并不回收内存
3、fragment的生命周期

onArrach()当碎片和活动建立关联的时候调用
onCreateView()为碎片创建视图(加载布局)时调用
onActivityCreated()确保与碎片相关联的活动一定已经创建完毕的时候调用
onDestroyView()当与碎片关联的视图被移除的时候调用
onDetach()当碎片和活动解除关联的时候调用

fragment的通信
1、在fragment中调用Activity中的方法getActivity
2、在Activity中调用Fragment中的方法接口回调
3、在Fragment中的调用Fragment中的findFragmentById或findFragmentByTag中的方法
FragmentManager的replace、add、remove
replace:把Activity的fragment替换
add:加到最上层
remove:删除
例子:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFragment aFragment = mFragment.newInstance("woshilskdj");
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().add(R.id.fragment_container,aFragment,"afragment").commit(); //在activity中加载Fragment
}
}
mFragment.java
public class mFragment extends Fragment {
private TextView title;
private Button enterB;
private Button changeText;
private bFragment bfragment;
public static mFragment newInstance(String title){
mFragment fragment = new mFragment();
Bundle bundle = new Bundle();
bundle.putString("title",title);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.fragment, container, false);
// 设置布局文件
return contentView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
title = view.findViewById(R.id.fragment);
enterB = view.findViewById(R.id.fragmentB);
changeText = view.findViewById(R.id.changeText);
enterB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(bfragment==null){
bfragment = new bFragment();
}
Fragment fragment = getFragmentManager().findFragmentByTag("afragment"); //判断fragmentManager有没有已经标识好的“afragment”的实例
if(fragment!=null){
//把fragment隐藏起来 再加载bfragment 这样返回的时候 不会再创建新的fragment
getFragmentManager().beginTransaction().hide(fragment).add(R.id.fragment_container,bfragment).addToBackStack(null).commit();
}else{
getFragmentManager().beginTransaction().replace(R.id.fragment_container,bfragment).addToBackStack(null).commit();
}
}
});
changeText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
title.setText("我是苏");
}
});
Bundle bundle = getArguments();
if(bundle!=null){
title.setText(bundle.getString("title"));
}
}
android fragment解析的更多相关文章
- Android Fragment 解析和使用
Android Fragment的生命周期和Activity类似,实际可能会涉及到数据传递,onSaveInstanceState的状态保存,FragmentManager的管理和Transactio ...
- Android Fragment解析(下)
今天被人问到了什么是Fragment,真是一头雾水,虽然以前也用到过,但不知道它是叫这个名字,狂补一下. 以下内容来自互联网,原文链接:http://blog.csdn.net/lmj62356579 ...
- Android Fragment解析(上)
今天被人问到了什么是Fragment,真是一头雾水,虽然以前也用到过,但不知道它是叫这个名字,狂补一下. 以下内容来自互联网,原文链接:http://blog.csdn.net/lmj62356579 ...
- 【Android自学日记】【转】Android Fragment 真正的完全解析(下)
上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上). 本篇将介绍上篇博客提到的:如何管理Frag ...
- Android Fragment 真正的完全解析(下)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和 ...
- Android Fragment 真正的完全解析(下)---转
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和 ...
- Android Fragment 真正的完全解析(上)--转
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fra ...
- Android——Fragment 真正的完全解析(下)(转)
原文地址:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种A ...
- Android—— Fragment 真正的完全解析(上)(转)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fra ...
随机推荐
- BZOJ4943 NOI2017蚯蚓排队(哈希+链表)
能看懂题就能想到正解.维护所有长度不超过k的数字串的哈希值即可,用链表维护一下蚯蚓间连接情况.由于这样的数字串至多只有nk个,计算哈希值的总复杂度为O(nk),而分裂的复杂度为O(ck^2),询问复杂 ...
- jQuery筛选总结
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [luogu4268][bzoj5195][USACO18FEB]Directory Traversal
题目大意 给你\(n\)个文件的关系,求出某一个点,这个点到叶节点的长度的总距离最短.(相对长度的定义在题目上有说明) 感想 吐槽一下出题人,为什么出的题目怎么难看懂,我看了整整半个小时,才看懂. 题 ...
- 前端学习 -- Html&Css -- ie6 png 背景问题
在IE6中对图片格式png24支持度不高,如果使用的图片格式是png24,则会导致透明效果无法正常显示 解决方法: 1.可以使用png8来代替png24,即可解决问题,但是使用png8代替png24以 ...
- 【洛谷P3224】永无乡 并查集+Splay启发式合并
题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点. 题解:学会了平 ...
- 【POJ1734】Sightseeing Trip 无向图最小环
题目大意:给定一个 N 个顶点的无向图,边有边权,如果存在,求出该无向图的最小环,即:边权和最小的环,并输出路径. 题解:由于无向图,且节点数较少,考虑 Floyd 算法,在最外层刚开始遍历到第 K ...
- JAVA:当数据库重启后连接池没有自动识别的解决办法
今天发现服务器上的一个服务程序出现问题,软件抛出:Connection reset by peer: socket write error 无法正常提供服务,找了一下原因,原来是因为数据库服务器重启, ...
- oracle 按 123456789 排序 而不是 1 10 11 2 这种
order by decode(trim(translate(cptm,'0123456789',' ')),null,to_number(cptm))
- Django model中的 class Meta 详解
通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model): bar = models.CharFi ...
- Ubuntu下安装nfs服务器
安装 NFS 软件包在 ubuntu 终端输入下面命令安装 NFS 服务器:vmuser@Linux-host: ~$ sudo apt-get install nfs-kernel-server # ...