1. 直接在Layout.xml中添加<Button/>
2. 在代码中动态添加,比如我们添加到一个LinearLayout中:
Button button = new Button(mActivity);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
button.setLayoutParams(params);
container.addView(button);
所以Fragment也很简单,就把它当做一个简单的View(但其实更像是“子 Activity”),然后添加方式也是一样。
1. 直接在Layout.xml中添加:
<?xml version="1.0" encoding="utf-8"?>2. 直接在代码中添加:
Fragment one = new FragmentOne();//自定义的Fragment类
//要先获取FragmentManager对象
FragmentManager fragmentManager = getSupportFragmentManager();
//开启一个FragmentTransaction事务
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.framelayout_view,one).commit();
其中添加到R.id.framelayout_view
的这个id
的ViewGourp
可以是<FrameLayout/>
,也可以是其他的比如<LinearLayout/>
等。
2. Fragment的基本操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MtC7uTAI-1651810831044)(https://user-gold-cdn.xitu.io/2019/8/19/16caa4aaef263e3c?imageView2/0/w/1280/h/960/ignore-error/1)]
看到我们上面的动态代码添加的时候需要获取FragmentTransaction
和FragmentManager
。
2.1 FragmentManager相关
1. getFragmentManager():
获取Fragment父容器的管理器,但是现在该方法在Activity中已经被标记不推荐使用了。
/**
- Return the FragmentManager for interacting with fragments associated
- with this activity.
- @deprecated Use {@link android.support.v4.app.FragmentActivity#getSupportFragmentManager()}
*/
@Deprecated
public FragmentManager getFragmentManager() {
return mFragments.getFragmentManager();
}
2. getSupportFragmentManager():
v4包下的这个方法,与上一个效果一样,不过是Android推荐使用的方法(毕竟可以兼容Android所有版本)
3. getChildFragmentManager():
我们提过,Fragment更像是一个“子Activity”,那你说"子Activity"中能否再添加Fragment,答案当然是可以。那么在Fragment内部中的Fragment的管理器,就需要使用getChildFragmentManager()
来获取了。
2.2 FragmentTransaction相关
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JfM4P3ut-1651810831046)(https://user-gold-cdn.xitu.io/2019/5/15/16abc05c8db01386?imageView2/0/w/1280/h/960/ignore-error/1)]
我们可以看到有添加删除各种方法操作。
1. attach/detach方法:
- detach(Fragment fragment) : 分离指定Fragment的UI视图
- attach(Fragment fragment) : 重新关联一个Fragmen