Android,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_out3 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 @Override13 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 @Override2 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;}
我是天王蓋地虎的分割線
Android軟體開發用什語言?
Javascript精通還做什麼android阿 汗.
Android軟體開發用什語言?
Javascript精通還做什麼android阿 汗.