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 ...
随机推荐
- day29 上周复习
上周内容回顾 初始面向对象 class 类名(父类1,父类2): 静态属性 = "" # 静态属性,类方法 def __init__(self): # 初始化方法 def func ...
- 【BZOJ4555】求和(多种解法混合版本)
[BZOJ4555]求和(多种解法混合版本) 题面 BZOJ 给定\(n\),求 \[f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i}S(i,j)\times 2^j \times ...
- [并查集+LCA USACO18OPEN ] Disruption
https://www.luogu.org/problemnew/show/P4374 一看这道题就是一个妙题,然后题解什么树链剖分...珂朵莉树... 还不如并查集来的实在!我们知道并查集本来就是路 ...
- [hgoi#2019/2/16t4]transform
题目描述 植物学家Dustar培养出了一棵神奇的树,这棵有根树有n个节点,每个节点上都有一个数字a[i],而且这棵树的根为r节点. 这棵树非常神奇,可以随意转换根的位置,上一秒钟它的根是x节点,下一秒 ...
- suoi38 卖XY序列 (贪心+前缀和)
因为只能带一个,买卖价格又一样,所以只要右边的比左边的大,就从这买下来然后带到下一个卖掉就行了(我想到别处再卖的话大不了再重新买回来嘛) 所以给max(w[i]-w[i-1],0)维护一个前缀和就行了 ...
- pyEcharts
例子: from pyecharts import Line line = Line("我的第一个图表", "这里是副标题",width="800px ...
- Looper Handler Mssage
1. 一个Handler只有一个队列;2. 在调用Handler.post(Runnable runnable)方法时,会将runnable封装成一个Message;3. 在队列执行时,会判断当前的M ...
- 【学习笔记 边分树】【uoj400】【CTSC2018】暴力写挂
题目 描述 有两棵树\(T\)和\(T'\),节点个数都为\(n\),根节点都为\(1\)号节点; 求两两点之间 $$ \begin{align} depth(x) + depth(y) - ...
- 洛谷P3195 玩具装箱TOY
题目大意: 有n个数,要将他们分成若干段,每一段的cost定义为: cost=r-l+ΣCk (k∈[r,l]) 该段的最终花费是:(cost-L)^2; 给出L,n,C(1~n),总共的最小花费. ...
- BSGS
北上广深/拔山盖世算法. yaT+b = z mod p p为质数,Hash表存b,枚举a,复杂度p0.5 记得特判y = 0的情况. inline void solve3() { Hash::cle ...