Android基礎(chǔ) - Fragment

老婆保佑票罐,代碼無BUG

目錄

  • 生命周期
  • 添加Fragment
    • 靜態(tài)添加
    • 動態(tài)添加
    • 幾個常用的Utils
  • fragment 傳值的問題

一.生命周期

> 我 x@#$@# O缡!应媚!

乍一看 猜极,我艸中姜,剛剛把Activity 生命周期理解,又要記這個跟伏,MMP丢胚,

大兄弟啊,別急受扳,你這么看

這樣是不是就感覺 携龟,很像,其實把勘高,真的就那么像峡蟋,不知道為啥,很多人都說fragment 是縮小版的Activity,這種說法 我感覺是不對的华望。蕊蝗,愚見,赖舟,以后再扯匿又。。

生命周期說明

  • onAttach
    當Fragment與Activity發(fā)生關(guān)聯(lián)時調(diào)用建蹄。

  • onCreateView

創(chuàng)建該Fragment的視圖

  • onActivityCreated

當Activity的onCreate方法返回時調(diào)用

  • onDestoryView

與onCreateView想對應(yīng),當該Fragment的視圖被移除時調(diào)用

  • onDetach

與onAttach相對應(yīng)裕偿,當Fragment與Activity關(guān)聯(lián)被取消時調(diào)用

> 注意:除了onCreateView洞慎,其他的所有方法如果你重寫了,必須調(diào)用父類對于該方法的實現(xiàn)

肯定有人會覺得 這么說會不會太簡單了嘿棘,

這里有些地方是看下面這么作者的 劲腿,大兄弟們,去吧鸟妙,哈哈(ps zhy我算是看他的文章成長的焦人,很推薦的一個大牛)

Android Fragment 真正的完全解析(上)

二.添加Fragment

靜態(tài)添加(不推薦)

自定義類繼承Fragment

//import android.support.v4.app.Fragment
public class TestFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_test, container, false);

    }
}

在MainActivity的activity_main.xml文件中添加碎片

<!--?xml version="1.0" encoding="utf-8"?-->
<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="com.allens.test.MainActivity">

 
   <!--  注意是fragment  name 和 id 都必須要寫上 -->
    <fragment android:name="com.allens.test.fragment.TestFragment" android:id="@+id/test_fragment" android:layout_width="match_parent" android:layout_height="match_parent">
</fragment></linearlayout>

MainActivity繼承FragmentActivity(原版的Activity不支持V4Fragment的加載)

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
內(nèi)心世界

是不是感覺很麻煩,相信我重父,未來的開發(fā) 你基本上都用不到花椭,了解就行了,哈哈

動態(tài)添加(推薦)

啥都不用管房午,也不需要FragmentActivity矿辽,寫好Fragment,直接擼代碼

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        TestFragment fragment = new TestFragment();
        transaction.add(R.id.main_ll, fragment);//這里的R.id.main_ll 是容器的id
        transaction.commit();

>拓展

  • remove (Fragment fragment)
    刪除某個碎片

  • repace(int layoutId,Fragment fragment)
    替換某個碎片


    竊喜

項目中常用的手法,第一個當屬選項卡的切換了

請叫我雷鋒

三.fragment 傳值的問題

Activity 傳參數(shù)給 Fragment

fragment中寫法

public class DataFragment extends Fragment {
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    private String mParam1;
    private String mParam2;


    public DataFragment() {
    }

    public static DataFragment newInstance(String param1, String param2) {
        DataFragment fragment = new DataFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_data, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.e("TAG","DATA1--->" + mParam1);
        Log.e("TAG","DATA2--->" + mParam2);
    }
}

Activity中寫法

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.main_ll, DataFragment.newInstance("data1","data2"));
        transaction.commit();

    }
}

這時候袋倔,就有人說了雕蔽,大兄弟啊 ,這么多代碼宾娜,寫的這么麻煩批狐,

早已看透

做為開發(fā)人員,肯定有辦法解決前塔,這么惡心的代碼的事情嚣艇,首先 你要確保你使用的開發(fā)工具是 Android Studio ,還在使用 Ecplise 的小伙伴嘱根。請看下圖

王的鄙視

ps 如果有大兄弟找到那個 go home 的圖片 請發(fā)給我髓废,謝謝

使用 Android Studio 生成 Fragment

第一步

第二步

然后就好了 ,哈哈该抒,有木有很簡單慌洪。

Fragment傳參數(shù)給 Activity

使用接口傳遞參數(shù)

請看第二步的第二個紅色框框,是不是還有個沒勾選上凑保,這次勾選上冈爹,然后就神奇的發(fā)現(xiàn),AS 幫你自動生成好了代碼欧引,你只需要實現(xiàn)他的接口就OK了频伤。

寫在最后

機智的小伙伴,我要說一下芝此,關(guān)于傳參數(shù)的問題憋肖,正在開發(fā)中,會使用其他的替代方案婚苹,畢竟這樣的方式岸更,寫起來很繁瑣,實際開發(fā)中膊升,會使用EventBus,或者其他的事件總線框架代替怎炊,這個在后面慢慢補充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末廓译,一起剝皮案震驚了整個濱河市评肆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌非区,老刑警劉巖瓜挽,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異院仿,居然都是意外死亡秸抚,警方通過查閱死者的電腦和手機速和,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剥汤,“玉大人颠放,你說我怎么就攤上這事】愿遥” “怎么了碰凶?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鹿驼。 經(jīng)常有香客問我欲低,道長,這世上最難降的妖魔是什么畜晰? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任砾莱,我火速辦了婚禮,結(jié)果婚禮上凄鼻,老公的妹妹穿的比我還像新娘腊瑟。我一直安慰自己,他們只是感情好块蚌,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布闰非。 她就那樣靜靜地躺著,像睡著了一般峭范。 火紅的嫁衣襯著肌膚如雪财松。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天纱控,我揣著相機與錄音辆毡,去河邊找鬼。 笑死甜害,一個胖子當著我的面吹牛胚迫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唾那,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼褪尝!你這毒婦竟也來了闹获?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤河哑,失蹤者是張志新(化名)和其女友劉穎避诽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體璃谨,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡沙庐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年鲤妥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拱雏。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡棉安,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铸抑,到底是詐尸還是另有隱情贡耽,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布鹊汛,位于F島的核電站蒲赂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刁憋。R本人自食惡果不足惜滥嘴,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望至耻。 院中可真熱鬧若皱,春花似錦、人聲如沸有梆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泥耀。三九已至饺汹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痰催,已是汗流浹背兜辞。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夸溶,地道東北人逸吵。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像缝裁,于是被迫代替她去往敵國和親扫皱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容