編輯:關於Android編程
之前寫過Fragment使用的程序,Fragment可以靜態,也可以動態載入內存中的,這一章進一步看看如何動態地更換Fragment和看看Fragment生命期都有什麼函數。
本章利用響應菜單點擊事件,輪流載入不同的Fragment,顯示不同的界面,效果如下:
開始的是沒有載入Fragmen為空白:
點擊菜單的NEXT FRAGMENT VIEW,就進入下一個界面,載入兩個:
繼續點擊顯示Fragment 1:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20150104/20150104091045125.jpg" width="130" height="230" alt="\">
繼續點擊,顯示Fragment2:
然後就是循環了:
如此循環顯示不同畫面。
一 首先實現這一效果的關鍵代碼,就是在菜單響應函數中輸入如下代碼:
@Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.next_fragment_view_menu_item: { FragmentManager fragManager = getFragmentManager(); FragmentTransaction fragTrans = fragManager.beginTransaction(); if (0 == turnNum) { Fragment1 frag1 = new Fragment1(); Fragment2 frag2 = new Fragment2(); fragTrans.replace(R.id.frame_layout1, frag1); fragTrans.replace(R.id.frame_layout2, frag2); } else if (1 == turnNum) { Fragment1 frag1 = new Fragment1(); Fragment frag2 = fragManager.findFragmentById(R.id.frame_layout2); fragTrans.replace(R.id.frame_layout1, frag1); if (frag2 != null) fragTrans.remove(frag2); } else if (2 == turnNum) { Fragment frag1 = fragManager.findFragmentById(R.id.frame_layout1); Fragment2 frag2 = new Fragment2(); if (frag1 != null) fragTrans.remove(frag1); fragTrans.replace(R.id.frame_layout2, frag2); } turnNum++; if (turnNum > 2) turnNum = 0; fragTrans.addToBackStack(null); fragTrans.commit(); return true; } } return super.onOptionsItemSelected(item); }
1 FragmentManager 是管理所有Fragment的類,故此查找已有的Fragment使用函數: Fragment frag2 = fragManager.findFragmentByI(R.id.framelayout2);注意要判斷是否取回Fragment,如果沒有那麼frag2 == null。
2 FragmentTransaction管理Fragment變更事務,所有動作,如例子中的remove, replace,都必須是在beginTransaction()和commit()之間才會生效,重復調用commit而沒有調用beginTransaction會程序崩潰的。
3 addToBackStack(null),就是手動把Fragment放在棧中,這樣可以使用back按鍵退回上一層的Fragment安排。Activity是自動放到棧中的。
4 簡單邏輯:turnNum是全局變量,根據這個turnNum的值的不同使用不同的Fragment。
二 主界面的xml如下:
<frameLayout android:id="@+id/frame_layout1" android:layout_weight="1" android:layout_width="0sp" android:layout_height="match_parent" /> <frameLayout android:id="@+id/frame_layout2" android:layout_weight="1" android:layout_width="0sp" android:layout_height="match_parent" />
三 菜單res/menu/main.xml的代碼:
package bill.su.fragment; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment1 extends Fragment { private final String TAG = "FRAGMENTTAG1"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(TAG, "onCreateView called"); return inflater.inflate(R.layout.fragment1, container, false); } @Override public void onAttach(Activity activity){ super.onAttach(activity); Log.d(TAG, "onAttach called"); } @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Log.d(TAG, "onCreate called"); } @Override public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); Log.d(TAG, "onActivityCreted called"); } @Override public void onStart(){ super.onStart(); Log.d(TAG, "onStart called"); } @Override public void onResume() { super.onResume(); Log.d(TAG, "onResume called"); } @Override public void onPause() { super.onPause(); Log.d(TAG, "onPause called"); } @Override public void onStop(){ super.onStop(); Log.d(TAG, "onStop called"); } @Override public void onDestroyView() { super.onDestroyView(); Log.d(TAG, "onDestroyView called"); } @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy called"); } @Override public void onDetach() { super.onDetach(); Log.d(TAG, "onDetach called"); } }
onAttached() : Fragment和Activity接起來的是調用
onCreateView(): Fragment的View創建
onActivityCreated():當Activity的onCreate()調用的時候調用
onDestroyView(): 當Fragment的view刪除的時候調用
onDetach(): Fragment從Activity中去掉的是調用
上一篇文章主要講述了Android的TouchEvent的分發過程,其中有兩個重要的函數:onInterceptTouchEvent和onTouchEvent,這兩個函數
首先肯定需要引用select2.js:點擊打開鏈接,點擊鏈接,自己新建一個select2.js把鏈接中的源碼復制進去;然後這裡面需要修改的是這個方法:function m
[android] 天氣app布局練習主要練習一下RelativeLayout和LinearLayout
大家使用Android的原生UI都知道,Android的Activity跳轉就是很生硬的切換界面。其實Android的Activity跳轉可以設置各種動畫。下面給大家看看