Android中Fragment的使用,切換和返回等問題-劉宇

第一步:我們需要一個空的Activity並繼承ActionBarActivity

 

第二步:創建一個Fragment,怎麼創建一個Fragment呢,先創建一個layout命名FragmentMain,隨後創建對應的java文件,命名MainFragment,文件的命名我們通常以Fragment開頭。對應的java文件必須繼承Fragment,注意導入的包,要是android.support.v4.app.Fragment這個包,隨後重寫onCreatView這個方法。

 

第三步:創建另一個Fragment,先創建一個layout命名FragmentAnother,隨後創建對應的java文件,命名AnotherFragment,文件的命名我們通常以Fragment開頭。對應的java文件必須繼承Fragment,注意導入的包,要是android.support.v4.app.Fragment這個包,隨後重寫onCreatView這個方法。

 

第四步:我們需要在Fragment所呈現的Activity上設置,當MainActivity創建的時候進行初始化。首先判斷一下Activiyt的當前狀態,savedInstanceState==null時執行Fragment初始代碼,代碼如下:

 

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(savedInstanceState == null){
            getSupportFragmentManager().beginTransaction().add(R.id.container,new MainFragment()).commit();
        }

    }
}

 

用getSupportFragmentManager方法獲取到Fragment的管理器,隨後beginTransaction方法開啓事務,添加相對於的fragment,然後commit提交,add第一個參數表示其父組件,第二個就是需要展現的Fragment的了

 

 

第五步:然後我們開始配置MianFragment這個java文件,不進行配置的話,即使Activity打開了,Fragment也沒有任何內容,第二步有說到,我們需要重寫onCreatView這個方法,這個方法有個返回值,將Fragment返回出去,也就是要將FragmentMain這個佈局文件返回出去,代碼如下:

 

public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_main,container,false);
    return root;
}

 

到這裏,我們啓動APP即可顯示第一個Fragment了,如何做到Fragment來切換呢

 

第六步:在主Fragment中添加一個按鈕,同來切換到另一個Fragment,此時我們就需要在第五步的onCreatView方法中添加代碼了,代碼如下:

 

public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_main,container,false);

    Button btnStart = (Button) root.findViewById(R.id.btnStartAnthoerFragment);
    btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.container,new AnotherFragment()).commit();
        }
    });
    return root;
}

 

 

注意:這裏的findViewById需要在root下引用,因爲這個按鈕在Fragment佈局當中

 

然後爲這個按鈕設置事件偵聽。如何實現切換Fragment呢,首先調用getFragmentManager方法獲取Fragment管理器,然後開啓事務beginTransaction這個方法。

注意:addToBackStack方法是用來設置返回鍵可操作Fragment,從而返回到上一個Fragment,如果不設置,在跳轉到第二個Fragment時按返回鍵會退出程序,這個方法可根據實際要求添加或捨去。

之前我們用的是add方法來添加Fragment使其顯示,這裏不能使用add方法了,需要使用replace方法來替換原有Fragment,然後commit提交。

 

第七步:隨後我們就要配置第二個Fragment的java文件AnthorFragment這個文件了,和第五步差不多,要讓第二個Fragment顯示出來,必須要讓他返回出去,代碼如下:

 

public class AnotherFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_another,container,false);
        return view;
    }
}

 

 

到這裏我們就能顯示主Fragment並點擊上面的按鈕跳轉到第二個Fragment了,並且按返回鍵可以跳回第一個Fragment,有的時候我們需要添加返回按鈕,並不是返回鍵,返回按鈕怎麼設置呢,這裏就需要在第二個Fragment下也就是AnotherFragment下添加代碼了,首先要給其設置一個返回按鈕,然後通過findViewById找到,代碼如下:

 

public class AnotherFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_another,container,false);

        Button btnBack = (Button) view.findViewById(R.id.btnBack);
        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getFragmentManager().popBackStack();
            }
        });
        return view;
    }
}

 

爲這個按鈕設置偵聽事件,在按鈕按下時調用getFragmentManager獲取到Fragment管理器,然後調用popBackStack方法即可返回到上一個Fragment了,值得注意的是:上一個Fragment需要設置addToBackStack方法添加到任務棧裏面去。到這裏簡單的Fragment就已經完成了。

 

 

By:Brycen Liu

發佈了20 篇原創文章 · 獲贊 14 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章