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 ...
随机推荐
- json_decode()相关报错
错误描述 PHP Warning: json_decode() expects parameter 1 to be string, array given in xxx.php on line 29 ...
- 自学Aruba1.5-Aruba体系结构-Aruba通讯过程
点击返回:自学Aruba之路 自学Aruba1.5-Aruba体系结构-Aruba通讯过程 1. Aruba通讯过程 Aruba 通讯过程: ①AP连接到现有网络的交换机端口,加电起动后,获得IP地址 ...
- 【bzoj3064】 CPU监控
http://www.lydsy.com/JudgeOnline/problem.php?id=3064 (题目链接) 题意 给出一个长度为$n$的数列$A$,同时定义一个辅助数组$B$,$B$开始与 ...
- pthread_cond_wait() 函数的使用
1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are us ...
- A1051. Pop Sequence
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...
- 斯坦福大学公开课机器学习:监督学习在行人检测的应用(supervised learning for pedestrian detection)
对于下图,左边是行人,作为阳性例子,赋值y=1,右边是景物,作为阴性例子,赋值y=0; 步长概念: 如下图所示,步长表示绿色框框移动的距离,有时候也称为滑动参数stride,如果一次移动一个像素,则称 ...
- MATLAB:图像选取局部区域滤波(roicolor、roipoly、roifill、fspecial、roifilt2函数)
对于某些特殊的图像处理,我们不希望将整张图都进行图像处理.这个时候就用到了roicolor.roipoly.roifill.fspecial.roifilt2函数.代码实现过程如下: close al ...
- python字典遍历的几种方法
(1)遍历key值 >>> a {'} >>> for key in a: print(key+':'+a[key]) a:1 b:2 c:3 >> ...
- logstash5.5 数据采入elasticsearch5.5(基于x-pack)
logstash5.5 数据采入elasticsearch5.5(基于x-pack) 以采集redis日志信息为例 redis日志文件.MQ(redis).logstash主机:10.10.83.16 ...
- Linux命令之cp
cp命令 用处:复制文件到当前目录下 用法:cp +要复制的文件的路径 + 复制后的文件名字 示例: (我这里有一个m1文件,内容是qwer,我想把它复制一份成为m2)