Android studio|初識Fragment

大家好,我是條條,這兩天剛開始學Fragment,和大家分享一下吧,有什么地方說的不好,請指教~

什么是Fragment?

Fragment直接翻譯就是分段、碎片的意思,你可以把Fragment看作是一個Activity的子Activity,是一個導航欄。Fragment是在Android 3.0(API 11)后引入的,最開始應用于平板,用于解決APP適應屏幕,當然,普通尺寸的手機也可以使用Fragment。


我們會在哪看到Fragment?

如果你用平板,打開設置可以看到,左邊是設置的列表,右邊是某項設置的詳細內(nèi)容;或者和下面的Fragment樣式展示一樣,某個應用左側(cè)顯示所有文章列表,點擊某項后右側(cè)顯示文章內(nèi)容(Fragment位置是不固定的);在手機中,打開淘寶,下側(cè)的導航欄就是Fragment,點擊不同的Fragment就顯示不同的內(nèi)容


Fragment的特點

Fragment是嵌套在Activity中的,將屏幕分成很多個區(qū)域,實現(xiàn)模塊化;Fragment有自己的生命周期,但依附于Activity,你可以把Activity看成一個人的頭部,F(xiàn)ragment就是上面的五官,通過不同的五官你可以執(zhí)行不同的功能,從而獲取到不同的信息,但是五官無法脫離頭部單獨存在,頭不在了,五官就沒有存在的意義啦,當然,我們的五官的數(shù)量和功能都已經(jīng)固定好了ˋ( ° ▽、° )


fragment樣式

fragment生命周期

onAttach():Fragment被添加到Activity時調(diào)用且只調(diào)用一次
onCreate():創(chuàng)建Fragment時調(diào)用且只調(diào)用一次
onCreateView():每次創(chuàng)建和繪制Fragment的View時調(diào)用,返回其View
onActivityCreate():包含F(xiàn)ragment的Activity啟動后調(diào)用
onDestroyView():摧毀View時調(diào)用
onDestroy():摧毀Fragment時調(diào)用
onDetach():將Fragment從Activity中刪除/替換后調(diào)用;注意:調(diào)用完onDestroy()后一定會調(diào)用該方法且只有一次
其他方法參照Activity,它們之間很類似


Fragment的應用場景

  1. 邏輯共享:
    • Fragment可以在不同設備不同屏幕之間共享UI(界面)和邏輯(Java代碼)
  2. 保存狀態(tài):
    • Activity在被銷毀前會自動保存當前狀態(tài),如果被銷毀或者重新創(chuàng)建(如橫豎屏切換)則需要通過代碼來保存;Fragment可以通過模塊化,分別來保存
  3. 回退導航:
    • 我們平時使用APP時經(jīng)常會遇到在頁面中會出現(xiàn)“上一步”和“下一步”,但是會關閉當前頁面的,而在Fragment中就不會關閉當前頁面,而是切換到上一個Fragment

關于Fragment的其他

Fragment的幾個子類:
  • 對話框:DialogFragment
  • 列表:ListFragment
  • 選項設置:PreferenceFragment
  • WebView界面:WebViewFragment
關于Fragment的包:

android.app.Fragmentandroid.support.v4.app.Fragment這兩個都可以,但是android.support.v4.app.Fragment的兼容性更高,可以兼容到1.6版本


如何創(chuàng)建Fragment?

靜態(tài)加載:

1、定義Fragment的xml布局文件
2、自定義Fragment類并且繼承Fragment類或其子類,同時實現(xiàn)onCreateView(),在該方法中通過inflater.inflater加載布局文件,記得返回view
3、在“宿主”Activity的布局文件中加入<fragment,要記得name屬性是要全類名哦~(即包名+類名)

動態(tài)加載:

1、通過getFragmentManager()獲取FragmentManager對象
2、通過fm.begin.Transaction()獲取FragmentTransaction對象
3、調(diào)用add()replace()加載Fragment;add(要傳入的容器,fragment對象)
4、最后還要調(diào)用commit()提交事務


一起來做一個“小栗子”吧

例子要求:左邊是一個fragment列表,包含一個按鈕;右邊是一個fragment;點擊按鈕后,右邊切換到一個新的fragment

  1. 先新建一個左邊的fragment:LeftFragment
  • 在java中實現(xiàn)onCreateView
public class LeftFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.left_fragment,container,false);
        return view;
    }
}
  • 然后在對應的xml文件中創(chuàng)建一個<Button這個你們自己寫把吧~
  1. 接下來創(chuàng)建右邊的fragment:RightFragment
  • java和xml內(nèi)容和上面一致,xml創(chuàng)建<TextView好區(qū)分新舊fragment
  1. 然后再創(chuàng)建新的fragment(就是點擊按鈕后替換掉LeftFragment的fragment)
  • RightFragment一毛一樣,自己寫吧
    4.找到并設置主體Activity
  • 在主題Activity的xml中加入左邊的fragment<fragment,然后創(chuàng)建一個幀布局<FrameLayout,在幀布局中加入右fragment;注意name的要求哦~
<fragment
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/left_fragment"
        android:name="com.example.fragmenttest.LeftFragment"/>

    <FrameLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/right_framelayout">

        <fragment
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/right_fragment"
            android:name="com.example.fragmenttest.RightFragment"/>

    </FrameLayout>
  • 然后回到主題Activity的java中,找到之前創(chuàng)建好的<Button,然后添加按鈕事件,在事件中動態(tài)加載新fragment
                //1.創(chuàng)建fragment對象
                OtherFragment otherFragment=new OtherFragment();
                //獲取FragmentManager管理器
                FragmentManager fragmentManager=getFragmentManager();
                //開啟事務
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                //替換碎片文件
                fragmentTransaction.replace(R.id.right_framelayout, otherFragment);
                //提交事務
                fragmentTransaction.commit();

效果圖:

點擊前

點擊后

我所認知的Fragment暫時就這么多,還有一些地方我也還沒弄明白,如果我上面有什么地方或者還有什么比較重要的點沒有講到,歡迎討論
再詳細可以看官方API[https://developer.android.google.cn/guide/components/fragments?hl=zh_cn]

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容