[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