Fragment的动态添加和替换
给出一个简单的例子来说明动态添加和替换Fragment
思路:
创建两个Fragment的类和一个Activity,在Activity中添加一个按钮,和一个FrameLayout的布局,通过点击按钮来实现切换Fragment,FrameLayout的布局,这是一个容器,用来动态添加和替换Fragment,一定要设置id值。
这里我只给出Activity中的java代码部分和一个替换Fragment的函数,代码如下:
public class FragmentDemoActivity extends AppCompatActivity {
private Button mBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_demo);
// 将CFragment添加到Activity中的FrameLayout布局中去
//也可用replaceFragment(new CFragment()) ,因为replaceFragment是我写好的一个函数
getSupportFragmentManager().beginTransaction().add(R.id.layout_container, new CFragment()).commitAllowingStateLoss();
//初始化组件
initViews();
}
private void initViews() {
mBtn = findViewById(R.id.fragment_btn);
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//切换到DFragment并设置回退栈,R.id.layout_container是Framelayout布局的id
getSupportFragmentManager().beginTransaction().replace(R.id.layout_container, new DFragment()).addToBackStack(null).commitAllowingStateLoss();
}
});
}
//替换Fragment的函数
public void replaceFragment(Fragment fragment) {
//得到一个碎片管理器的实例
FragmentManager manager = getSupportFragmentManager();
//得到一个碎片事务的实例并开启这个事务
FragmentTransaction transaction = manager.beginTransaction();
//将容器中的Fragment替换为指定的Fragment
transaction.replace(R.id.layout_container, fragment);
//添加回退栈
transaction.addToBackStack(null);
//提交事务
transaction.commitAllowingStateLoss();
}
}
布局文件中就是在一个Activity中写了一个按钮和一个FrameLayout的布局。
注意以上代码中的replaceFragment()函数,这是自己写的一个函数,这个函数的内容就是替换和添加碎片的核心。