Android 动态加载碎片过程

Android 中怎么动态加载碎片

  1. 创建待添加的碎片实例。
  2. 获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager() 方法得到。
  3. 开启一个事务,通过调用beginTransaction()方法开启。
  4. 向容器中添加或者替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。
  5. 提交事务,调用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();

猜你喜欢

转载自blog.csdn.net/qq_24523279/article/details/90205708
今日推荐