Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android -- Fragment注意事項

Android -- Fragment注意事項

編輯:關於Android編程

ViewPager+Fragment                                                                   讓Fragment成為ViewPager的一頁時,FragmentManager會一直保存管理創建好了的Fragment,即使當前不是顯示的這一頁,Fragment對象也不會被銷毀,在後台默默等待重新顯示。但如果Fragment不再可見時,它的視圖層次會被銷毀掉,下次顯示時視圖會重新創建。   出於使用FragmentPagerAdapter  時,Fragment對象會一直存留在內存中,所以當有大量的顯示頁時,就不適合用FragmentPagerAdapter 了,FragmentPagerAdapter  適用於只有少數的page情況,像選項卡。這個時候你可以考慮使用FragmentStatePagerAdapter ,當使用FragmentStatePagerAdapter  時,如果Fragment不顯示,那麼Fragment對象會被銷毀,但在回調onDestroy()方法之前會回調onSaveInstanceState(Bundle outState)方法來保存Fragment的狀態,下次Fragment顯示時通過onCreate(Bundle savedInstanceState)把存儲的狀態值取出來,FragmentStatePagerAdapter  比較適合頁面比較多的情況,像一個頁面的ListView。   動畫                                                                                       1 FragmentTransaction ft = getFragmentManager().beginTransaction();  2 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);  3 ft.replace(R.id.details, detail);         4 ft.addToBackStack(null);  5 ft.commit(); 代碼設置的fade(漸變)效果。   復制代碼 1 FragmentTransaction ft = getFragmentManager().beginTransaction(); 2 //setCustomAnimations()必須位於replace()之前,否則效果不起所中。它的兩個參數分別為enter,exit的效果。系統目前提供兩個效果,分別為android.R.animator.fade_in和android.R.animator.fade_out 3 ft.setCustomAnimations(R.animator.slide_in_left,R.animator.slide_out_right); 4 ft.addToBackStack(null); 5 ft.replace(R.id.details,"detail"); 6 ft.commit(); 復制代碼 利用setCustomAnimations()   無參構造函數&傳參數                                                                   fragment一定要有一個無參構造函數,如果要給fragment傳參,一定要使用Bundle方式傳參,而不重載構造函數傳參,因為在fragment重新生成的使用不會執行這個帶參構造函數,而是執行無參構造函數。   復制代碼  1 public static VechileFrag newInstance(Vehicle vehicle, String userId, boolean isAdd) {  2     VechileFrag mf = new VechileFrag();  3     Bundle args = new Bundle();  4     args.putString("userId", userId);  5     args.putBoolean("isAdd", isAdd);  6     args.putParcelable("vehicle", vehicle);  7     mf.setArguments(args);  8     return mf;  9 } 10  11  12 @Override 13 public void onCreate(Bundle savedInstanceState) { 14     super.onCreate(savedInstanceState); 15     Bundle args = getArguments(); 16     if (args != null) { 17         userId = args.getString("userId"); 18         isAdd = args.getBoolean("isAdd"); 19         vehicle = args.getParcelable("vehicle"); 20         if (vehicle == null) { 21             vehicle = new Vehicle(); 22         } 23     } 24 }     復制代碼 Menu                                                                                      1 @Override 2     public void onCreate(Bundle savedInstanceState) { 3         super.onCreate(savedInstanceState); 4         setHasOptionsMenu(true); 5     } 這樣之後,就可以調用onCreateOptionsMenu了。   保存Fragment的切換                                                                    復制代碼 Fragment fragment = fragments.get(i); if(!fragment.isAdded()) {     if(currentIndex!=-1)     fragments.get(currentIndex).onPause();     ft = fm.beginTransaction();     ft.setTransition(android.support.v4.app.FragmentTransaction.TRANSIT_FRAGMENT_FADE);     ft.add(R.id.framelayout,fragment);     // ft.addToBackStack(null);     ft.commit();     currentIndex=i; } else {     ft = fm.beginTransaction();     fragments.get(currentIndex).onPause();     ft.setTransition(android.support.v4.app.FragmentTransaction.TRANSIT_FRAGMENT_FADE);     ft.hide(fragments.get(currentIndex));     ft.show(fragments.get(i));     fragments.get(i).onStart();     ft.commit();     currentIndex=i; }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved