三三要成為安卓糕手
上一篇文章,我們是在xml中靜態添加fragment,但是一些修改或者其他事情是做不了的;
本章我們達成在java代碼中靈活添加、刪除、替換fragment操作
一:核心代碼展示
簡單做一個這種頁面
public class FragmentActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_fragment);findViewById(R.id.btn_add).setOnClickListener(this);findViewById(R.id.btn_remove).setOnClickListener(this);findViewById(R.id.btn_replace).setOnClickListener(this);}@Overridepublic void onClick(View v) {MyFragment myFragment = new MyFragment();//獲取管理器,開始事務FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();if(v.getId() == R.id.btn_add){//獲取管理器,開始事務fragmentTransaction.add(R.id.fcv, myFragment,"tag_myFragment");//提交事務fragmentTransaction.commit();} else if (v.getId() == R.id.btn_remove) {//方式二:id移除,優先用這個Fragment fragment = fragmentManager.findFragmentById(R.id.fcv);fragmentTransaction.remove(fragment);fragmentTransaction.commit();//方式一:直接移除
// fragmentTransaction.remove(myFragment);//方式三:tag移除法
// fragmentTransaction.remove(fragmentManager.findFragmentByTag("tag_myFragment"));} else if (v.getId() == R.id.btn_replace) {fragmentTransaction.replace(R.id.fcv,new BlueFragment(),"tag_BlueFragment");fragmentTransaction.commit();}}
}
1:三種移除方式
- 直接移除new出來的fragment
- id移除,通過FragmentContainer去移除,泛用性更好最推薦。理解成所有Fragment都會抵達的總站,在這里管理更方便
- tag移除,這是Fragment的一個標簽
2:獲取管理器和開始事務
這兩行代碼盡量不要提取成方法成員變量,避免一些未知錯誤
//獲取管理器,開始事務FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();fragmentTransaction.add(R.id.fcv, myFragment,"tag_myFragment");
在這段代碼中,通過 fragmentTransaction.add(R.id.fcv, myFragment, "tag_myFragment")
這行代碼,是將 myFragment
這個 Fragment
實例添加到了 id
為 fcv
的容器,從而實現把 myFragment
對應的布局關聯到 R.id.fcv
這個容器里,讓 myFragment
的界面能夠在該容器所在的位置顯示出來。
一句話總結:把myFragment布局關聯到R.id_fcv這個FragmentContainer中
(1)getSupportFragmentManager()
自定義啟動類繼承AppCompatActivity;又繼承FragmentActivity
getSupportFragmentManager()是FragmentActivity中提供的方法在當前類中直接獲取Fragment管理器
(2)使用事務
開始事務
將當前某個Activity關聯控件當中
第一個參數,第二個參數:你要添加的是哪個Fragment,第三個參數:要添加的Fragment在FragmentManager當中的TAG是什么(性能更好)
3:效果
4:注意事項
每次處理完事務Transaction后記得要commit
二:替換的Fragment代碼展示
1:為什么更推薦用id移除
添加紅色,替換為藍色,移除掉藍色,就會出現bug;因為當前不是tag_myFragment了而是藍色view,那還移除個蛋