一.Fragment Manager API
✨FragmentManager用来管理Activity中的fragment
✨findFragmentById()通过id查找Activity中的fragment
✨findFragmentByTag()通过字符串查找Activity中的fragment
✨popBackStack()模拟器用户的点击Back键的操作
✨addOnBackStackChangeListenter() 添加后台栈改变监听器
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // btn = (Button)findViewById(R.id.btn); //获取FragmentManager对象 fragmentManager = getFragmentManager(); // 查找fragment对象 // myFragment = (fragment)fragmentManager.findFragmentById(R.id.frag); myFragment = (fragment)fragmentManager.findFragmentByTag("tagtag"); } // 按钮监听事件 public void setting (View view){ myFragment.settingHeloType("你好北京"); }
二.Fragment Trans action API
✨add()向容器中添加一个Fragment
✨remove()删除一个Fragment
✨replace()将容器中的Fragment替换成新的Fragment
✨hide()隐藏已存在的fragment
✨show()显示此前隐藏的fragment
✨addToBackStack()将事物添加到后台栈
✨commit()提交事物,将改变应用到Activity
//TODO:添加fragment public void addFragment(View view){ // 1.获得fragmentmanager FragmentManager fm = getFragmentManager(); // 2.通过Fragment得到FragmentTrasaction对象 FragmentTransaction ft = fm.beginTransaction(); // 3.将Fragment添加到容器中 MyFragment fra = new fragment(); // 第一个参数:容器的ID,第二个参数fragment对象,第三个参数fragment参数的tag值 ft.add(R.id.layout,fra,"test"); // 4.提交 ft.commit(); } //TODO:删除fragment public void removeFragment(View view){ // 1.获得fragmentmanager FragmentManager fm = getFragmentManager(); // 2.通过Fragment得到FragmentTrasaction对象 FragmentTransaction ft = fm.beginTransaction(); // 3.移除 MyFragment fra = (fragment)fm.findFragmentByTag("test"); ft.remove(fra); // 4.提交 ft.commit(); } //TODO:隐藏或者显示fragment public void hideFragment(View view){ // 1.获得fragmentmanager FragmentManager fm = getFragmentManager(); // 2.通过Fragment得到FragmentTrasaction对象 FragmentTransaction ft = fm.beginTransaction(); // 3.隐藏或者显示 MyFragment fra = (fragment)fm.findFragmentByTag("test"); if (fra.isHidden() ){ ft.show(fra); }else{ ft.hide(fra); } // 4.提交 ft.commit(); } //TODO:替换fragment public void replaceFragment(View view){ num++; // 使用静态方法产生对象 MyFragment fra = com.example.mac.fregment.fragment.newInstace(num); // 替换 getFragmentManager().beginTransaction() .replace(R.id.layout,fra) .addToBackStack(null)//返回键递减作用 .commit(); } }
#pragma mark - palceFragment用静态方法创建fragment fragment创建对象的构造方法是不能携带参数的,携带参数用静态方法创建 public class fragment extends Fragment { private int count; public static MyFragment newInstace(int num){ MyFragment f = new fragment(); Bundle bundle = new Bundle(); bundle.putInt("count",num); // 在fragment中设置参数 f.setArguments(bundle); return f; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments(); count = bundle.getInt("count"); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment,null); return view; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { tv = (TextView)view.findViewById(R.id.tv); super.onViewCreated(view, savedInstanceState); tv.setText("textVuew=="+count); } public void settingHeloType(String string){ this.string = string; tv.setText(string); } }