多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android百日程序: Fragment動態管理和生命期

Android百日程序: Fragment動態管理和生命期

來源:程序員人生   發布時間:2015-01-08 14:00:32 閱讀次數:3746次

之前寫過Fragment使用的程序,Fragment可以靜態,也能夠動態載入內存中的,這1章進1步看看如何動態地更換Fragment和看看Fragment生命期都有甚么函數。


本章利用響應菜單點擊事件,輪番載入不同的Fragment,顯示不同的界面,效果以下:

開始的是沒有載入Fragmen為空白:


點擊菜單的NEXT FRAGMENT VIEW,就進入下1個界面,載入兩個:


繼續點擊顯示Fragment 1:


繼續點擊,顯示Fragment2:


然后就是循環了:



如此循環顯示不同畫面。

1 首先實現這1效果的關鍵代碼,就是在菜單響應函數中輸入以下代碼:

@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按鍵退回上1層的Fragment安排。Activity是自動放到棧中的。

4 簡單邏輯:turnNum是全局變量,根據這個turnNum的值的不同使用不同的Fragment。

2 主界面的xml以下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="bill.su.fragment.MainActivity" android:orientation="horizontal" android:id="@+id/linear_fragment" android:baselineAligned="false" > <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" /> </LinearLayout>

兩個FrameLayout用來裝Fragment


3 菜單res/menu/main.xml的代碼:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="bill.su.fragment.MainActivity" > <item android:id="@+id/next_fragment_view_menu_item" android:showAsAction="always" android:title="@string/next_fragment_view_menu_item" /> </menu>

4 測試Fragment生命期的全部代碼:

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"); } }

主要和Activity不同的是:

onAttached() : Fragment和Activity接起來的是調用

onCreateView(): Fragment的View創建

onActivityCreated():當Activity的onCreate()調用的時候調用

onDestroyView(): 當Fragment的view刪除的時候調用

onDetach(): Fragment從Activity中去掉的是調用




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产福利在线免费观看 | 精品无人乱码一区二区三区 | 欧美一区二区在线视频 | 亚洲图片在线 | 国产精品三级一区二区 | 欧美成人性色大片在线观看 | freexxxhd性 | 免费视频成人 | 91亚洲精品成人一区 | 片在线观看免费观看视频 | 欧美八区| 精品在线观看免费 | 香蕉久久夜色精品国产2020 | 日本午夜精品一本在线观看 | 性大交 | 亚洲综合小说久久另类区 | 最近的中文字幕手机在线看免费 | 午夜免费影院 | 日本特黄色大片 | 国产毛片视频网站 | 日本高清不卡免费 | 亚洲国产精品久久精品成人 | 日本久久综合视频 | 亚洲欧美乱综合图片区小说区 | 在线观看麻豆 | 麻豆亚洲精品一区二区 | 午夜dj免费视频观看在线播放 | 欧美一级日韩一级亚洲一级 | 中文字幕视频免费在线观看 | 国产中文字幕第一页 | 91精品一区二区 | 手机在线看片国产日韩生活片 | 国产综合视频在线观看 | 亚洲国产色综合有声小说 | 另类天堂 | 欧美人与动人物姣配xxxx | 天天视频官网天天视频在线 | 在线视频 一区二区 | 国产午夜a理论毛片在线影院 | 免费视频性 | 叼嘿免费视频 |