1. 程式人生 > >[Android][App]getSupportFragmentManager() 和 getFragmentManager()使用場景

[Android][App]getSupportFragmentManager() 和 getFragmentManager()使用場景

在Android開發中,少不了Fragment的運用。

目前在實際運用中,有v-4包下支援的 Fragment 以及 app 包下的 Fragment.

Fragment的運用有二:

1、v-4包下支援的 Fragment

2、app包下的 Fragment,

這兩個包下的 FragmentManager 獲取方式有點區別,所以大家在運用的過程中,一定要注意自己的導的包。

 

app包下 FragmentManager 用:

Fragmentmanager  fragmentManager = getFragmentManager();

public class FragmentMain extends Fragment {

    public View onCreateView(
            LayoutInflater inflater,
            @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {

        View root = inflater.inflate(R.layout.fragment_main, container, false);

        root.findViewById(R.id.btnFragmentMain).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getFragmentManager()
                        .beginTransaction()
                        .addToBackStack(null)
                        .replace(R.id.containerFragment,new AnotherFragment())
                        .commit();
            }
        });
		
        return root;
    }
}

 

v-4包的FragmentManager用:

FragmentManager   fragmentManager = getSupportFragmentManager()   獲取

public class FragmentMainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main_root);

        if (savedInstanceState == null)
        {
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.containerFragment, new FragmentMain())
                    .commit();
        }
    }
}

 

注意一:

getSupportFragmentManager()主要用於支援 3.0以下android系統API版本,

3.0以上系統可以直接呼叫getFragmentManager() ,

因為fragment是3.0以後才出現的元件,為了這之前的系統版本也能使用fragment,

藉助V4包裡面的getSupportFragmentManager()方法來間接獲取FragmentManager()物件,

3.0版本之後,有了Fragment的api,就可以直接使用getFragmentManager()這個方法來獲取物件。

 

注意二:

有時在使用getSupportFragmentManager()時,發現已經添加了 v-4包 支援,

但是依舊找不到getSupportFragmentManager().

因為 getSupportFragmentManager()  有其運用範圍,只能在部分activity中運用。

此時要注意是否是在Activity中使用,因為當前Activity中並沒有此方法的定義,

當遇到 getSupportFragmentManager()  沒定義的問題時,修改下activity為 FragmentActivity 或者 AppCompatActivity。

必須是繼承 FragmentActivity 或者 AppCompatActivity,然後使用。

 

注意三:
Fragment巢狀Fragment要用getChildFragmentManager().

getChildFragmentManager() 所得到的是在 fragment  裡面子容器的管理器。

end

 

參考:https://blog.csdn.net/pyfysf/article/details/64920708