Android 中怎么动态加载碎片
- 创建待添加的碎片实例。
- 获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager() 方法得到。
- 开启一个事务,通过调用beginTransaction()方法开启。
- 向容器中添加或者替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。
- 提交事务,调用commit()方法来完成。
示例代码
/**
* 先贴上业务逻辑代码
* 布局文件在代码下方
* 注:Fragment最好是统一使用v4包下的
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnReplace = findViewById(R.id.btn_replace);
btnReplace.setOnClickListener(this);
//RightFragment 替换成你自己的*Fragment即可
replaceFragment(new RightFragment());
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btn_replace:
//替换成你想要替换的碎片视图即可
replaceFragment(new AnotherFragment());
break;
default:
break;
}
}
private void replaceFragment(Fragment fragment) {
FragmentManager mgr = getSupportFragmentManager();
FragmentTransaction transaction = mgr.beginTransaction();
//这个id是在layout中声明的碎片跟视图
transaction.replace(R.id.frame_root, fragment);
transaction.commit();
}
}
activity_main.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/btn_replace"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="replace" />
<FrameLayout
android:id="@+id/frame_root"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
在碎片中模拟返回栈
模拟返回栈的意思是,多个Fragment加载后,点击返回按钮返回上一个加载的Fragment视图,只需要添加一个属性即可。
在FragmentTransaction中提供了一个addToBackStack()方法,可以用于将一个事务添加到返回栈中,修改代码:
FragmentManager mgr = getSupportFragmentManager();
FragmentTransaction transaction = mgr.beginTransaction();
//这个id是在layout中声明的碎片跟视图
transaction.replace(R.id.frame_root, fragment);
//模拟返回栈
transaction.addToBackStack(null);
transaction.commit();