动态加载
步骤
1、新建两个Fragment布局的xml
创建方法如下,创建后没有任何修改。
- 布局文件名字分别为
1、res/layout/fragment_itm_blank.xml
2、res/layout/fragment_itm_list.xml (这个还对应有一个list的xml:res/layout/fragment_itm_list_list.xml)
- 在生产的过程中也生成类
1、java/com/pha/first/FragmentItmList.java
2、java/com/pha/first/FragmentItmBlank.java
创建主main布局文件和类文件
布局:res/layout/activity_fragment_main.xml
类文件:java/com/pha/first/FragmentMainActivity.java
获得FragmentManager对象,通过getSupportFragmentManager();
其代码
FragmentManager supportFragmentManager = getSupportFragmentManager();
获得FragmentTransaction对象,通过beginTransaction( );
FragmentTransaction transaction = supportFragmentManager.beginTransaction();
调用add( )方法或者replace( )方法加载Fragment;
add(要传入的容器,fragment对象),replace 同样如此。
transaction.replace(R.id.fra_one,fragment);
调用commit( )方法提交事务
代码:
transaction.commit();
最终java/com/pha/first/FragmentMainActivity.java代码
package com.pha.first;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
public class FragmentMainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_main);
findViewById(R.id.btn_fra_one).setOnClickListener(this);
findViewById(R.id.btn_fra_two).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_fra_one:
ChangeFragment(new FragmentItmBlank());
break;
case R.id.btn_fra_two:
ChangeFragment(new FragmentItmList());
break;
default:
break;
}
}
private void ChangeFragment(Fragment fragment) {
FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = supportFragmentManager.beginTransaction();
transaction.replace(R.id.fra_one,fragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
效果图
Fragment的事务
主要借助FragmentTransaction
- add():将一个Fragment实例添加到Activity的最上层 。
- remove():将一个Fragment实例从Activity的Fragment队列中删除。
- replace(int containerViewId, Fragment
fragment):替换containerViewId中的Fragment实例。相当于remove所有的Fragment,然后add当前Fragment - hide(Fragment fragment):隐藏当前的Fragment,仅仅是设为不可见,并不会销毁。
- show(Fragment fragment):显示之前隐藏的Fragment。
- detach(Fragment
fragment):会将view从UI中移除,和remove()不同,此时Fragment的状态依然由FragmentManager维护。 - attach(Fragment fragment):重建view视图,附加到UI上并显示。
- commit():提交一个事务。最后一个都要使用
Fragment的管理
主要通过FragmentManager实现此功能。
-
findFragmentByiId( )获取指定的fragment,
-
popBackStack( )方法弹出后台Fragment:
-
addToBackStack(nulI)加入栈
-
addOnBackStackChangeListener:监听后台栈的变化