fragment切換簡單實現
fragment切換我總結了以下三種方法:
1、用FragmentTransacton類的remove()方法移除所有不顯示的fragment,用它的add()新增要顯示的fragment;
2、直接使用FragmentTransaction類的replace()方法載入要顯示的fragment;
3、用FragmentTransAction類的hide()方法先將所有fragment隱藏掉,
再用它的show()方法顯示要顯示的fragment。
第一種方法極度不建議使用,因為它具有破壞性;第二種次之,所以這裡我要講的是第三種[/滑稽護體],不使用第二種的另外一個原因是它會重複載入資料;當然,會使用懶載入的道友可以忽略這一點。
首先我們需要一個管理類:FragmentManager,然後還需要一個事務管理類:
FragmentManager fm; FragmentTransaction transaction;
我們將所有Fragment裝到一個集合裡面,因為這裡我只講怎麼切換fragment,還不會使用Fragment的可以參考這篇文章:Fragment的簡單使用
List<Fragment> fragments = new ArrayList<>();
我們在onCreate()方法中將FragmentManager物件例項化:
fm = getSupportFragmentManager();
我們定義一個方法,傳入一個基本整型引數,我不說這個引數是幹嘛的,相信你也知道,不知道的猜一下。
private void showWho(int index){ //TODO implemention }
在showWho()方法中插入以下程式碼:
transaction=fm.beginTransaction(); //隱藏fragments集合中的所有Fragment for (int i = 0; i < fragments.size(); i++) { try{ transaction.hide(fragments.get(i)); }catch (NullPointerException e){ Log.i("err================>","指定Fragment還沒加入FragmentTransaction中"); } //transaction.remove(fragments.get(i)); } //如果指定的Fragment還沒新增到transaction物件中,則先新增,再顯示,否則直接顯示 if (fragments.get(index).isAdded()){ transaction.show(fragments.get(index)); }else { transaction.add(android.R.id.content, fragments.get(index)); transaction.show(fragments.get(index)); } //提交操作 transaction.commit();
然後在需要的位置呼叫showWho()方法即可,一般在初始化的時候呼叫一次,然後在控制元件的點選事件呼叫一次。別忘了傳遞引數喔