亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 【移動開發】Android中強大的適配功能----Fragment(碎片)總結

【移動開發】Android中強大的適配功能----Fragment(碎片)總結

發布時間:2020-06-27 00:32:58 來源:網絡 閱讀:10325 作者:zhf651555765 欄目:開發技術

作為大多數剛接觸Android應用開發的人來說,在一個強大的Activity類中,就可以完成豐富多彩的UI工作,但是雜亂的屏幕分辨率,使得本來好不容易寫好的UI,變得不堪入目。。。該怎么辦那?

查閱了好多資料,才發現,原來我out了!【移動開發】Android中強大的適配功能----Fragment(碎片)總結早在Android在3.0版本就引入了Fragment(碎片)功能,它非常類似于Activity,可以像Activity一樣包含布局,通過將Activity 的布局分散到frament 中,可以在運行時修改activity 的外觀,并且由activity 管理的back stack 中保存些變化,很巧妙的解決了不同分辨率手機上UI差異變化的問題。總結一下吧!


一.Fragment介紹:

官方文檔:http://developer.android.com/guide/components/fragments.html

【移動開發】Android中強大的適配功能----Fragment(碎片)總結

Fragment是我們在單個Activity上要切換多個UI界面時,要顯示的不同內容。模塊化這些UI面板可以提供給其他Acitivity來使用,因此我們可以簡單地把Fragment看成類似于TextView控件一樣,可以被任意的Activity進行加載。


1.靜態加載:

首先,在Layout下建立兩個xml

fragment1.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#000000"  >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是Fragment1"
        />
</LinearLayout>

fragment2.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#0000ff">
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是Fragment2" />
</LinearLayout>

之后建立兩個類:

FragmentFirst類:

package com.zhf.android_fragmentdemo;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FragmentFirst extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment1, container, false);
    }
}

FragmentSecond類:

package com.zhf.android_fragmentdemo;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FragmentSecond extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment2, container, false);
    }
}

最后一步就是在activity_main.xml中應用這兩個布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <fragment
        android:id="@+id/fragment1"
        android:name="com.zhf.android_fragmentdemo.FragmentSecond"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1" />
    <fragment
        android:id="@+id/fragment2"
        android:name="com.zhf.android_fragmentdemo.FragmentFirst"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1" />
</LinearLayout>

主類MainActivity中不用添加其他代碼,直接加載activity_main.xml即可。

效果圖:

【移動開發】Android中強大的適配功能----Fragment(碎片)總結

ok!簡單三步就將fragment加載進去了,當然這只是fragment的一小部分功能,它的強大之處其實在于:Activity能夠根據自身情況來動態的加載fragemnt,使你的UI界面變得更加多樣可變!

2.動態加載:(重點

首先,現將activity_main.xml中多余部分去掉:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
</LinearLayout>

其次,就是在MainActivity類中動態添加這兩個Fragment類:

package com.zhf.android_fragmentdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Display display = getWindowManager().getDefaultDisplay();
        if (display.getWidth() > display.getHeight()) {
            FragmentFirst fragmentFirst = new FragmentFirst();
            getFragmentManager().beginTransaction()
                    .replace(R.id.main_layout, fragmentFirst).commit();
        } else {
            FragmentSecond fragmentSecond = new FragmentSecond();
            getFragmentManager().beginTransaction()
                    .replace(R.id.main_layout, fragmentSecond).commit();
        }
    }
}

運行一下,效果出來了,為了體現出動態,大家可以試著把手機自動轉屏打開,轉一下屏試試!

【移動開發】Android中強大的適配功能----Fragment(碎片)總結 ----轉屏之后---> 【移動開發】Android中強大的適配功能----Fragment(碎片)總結


注:動態加載過程步驟

1.獲取到FragmentManager,在Activity中可以直接通過getFragmentManager得到。

2.調用beginTransaction方法開啟一個事務

3.向容器內加入Fragment,一般使用replace方法實現,需要傳入容器的id和Fragment的實例。

4.提交事務,調用commit方法提交。


介紹完這兩種方式,大家是不是已經對其有了一些感性的認識,這里注意一下Fragment是在3.0版本引入的,如果你使用的是3.0之前的系統,需要先導入android-support-v4的jar包才能使用Fragment功能,這里可能需要繼承FragmengActivity(現在建立低版本項目時,ADT會自動將libs下的android-support-v4.jar構建到項目路徑)


接下來我們具體挖掘一下生命周期及其Fragment中一些主要方法的介紹


二.Fragment類的生命周期


復寫fragment中的方法,測試一下它的生命周期看看它與Activity的異同。


package com.zhf.android_fragmentdemo;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
 * Fragment的生命周期
 *     注意: 方法中的排列次序即為fragment全過程:啟動時方法調用次序 + 退出時方法調用次序
 * @author ZHF
 *
 */
public class FragmentFirst extends Fragment {
                                                                                                                                                                                         
    /**Fragment和Activity建立關聯的時候調用**/
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        System.out.println("onAttach");
    }
                                                                                                                                                                                         
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("onCreate");
    }
    /**為Fragment加載布局時調用**/
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        System.out.println("onCreateView");
        return inflater.inflate(R.layout.fragment1, container, false);
    }
                                                                                                                                                                                         
    /**當Activity中的onCreate方法執行完后調用**/
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        System.out.println("onActivityCreated");
    }
                                                                                                                                                                                         
    @Override
    public void onStart() {
        super.onStart();
        System.out.println("onStart");
    }
    @Override
    public void onResume() {
        super.onResume();
        System.out.println("onResume");
    }
    @Override
    public void onPause() {
        super.onPause();
        System.out.println("onPause");
    }
    @Override
    public void onStop() {
        super.onStop();
        System.out.println("onStop");
    }
    /**Fragment中的布局被移除時調用**/
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        System.out.println("onDestroyView");
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("onDestroy");
    }
    /**Fragment和Activity解除關聯的時候調用**/
    @Override
    public void onDetach() {
        super.onDetach();
        System.out.println("onDetach");
    }
}

打印結果:

1.運行一下:

【移動開發】Android中強大的適配功能----Fragment(碎片)總結

2.返回退出:

【移動開發】Android中強大的適配功能----Fragment(碎片)總結

3.Home鍵退出:

【移動開發】Android中強大的適配功能----Fragment(碎片)總結

4.再次進入:

【移動開發】Android中強大的適配功能----Fragment(碎片)總結


通過打印的結果,我們應該可以清楚的了解到其實fragment和Activity的生命周期還是很相似的【移動開發】Android中強大的適配功能----Fragment(碎片)總結

(Activity生命周期博客:http://smallwoniu.blog.51cto.com/blog/3911954/1246732

官網截圖:

【移動開發】Android中強大的適配功能----Fragment(碎片)總結


三.Fragment中有幾個重要的回調方法

方法描述
onAttach()Fragment和Activity建立關聯的時候調用
onCreateView()為Fragment加載布局時調用
onActivityCreated()當Activity中的onCreate方法執行完后調用
onDestroyView()Fragment中的布局被移除時調用
onDetach()Fragment和Activity解除關聯的時候調用




只有掌握了Fragment中這幾個重要的方法,在使用的過程中才能更加靈活的與Activity配套使用,動態加載以適應不同屏幕分辨率的狀況!


ok! 因為本人也是剛接觸Fragment時間不長,這里也是查閱了許多的資料,簡單總結了一番,方便以后查閱,希望能幫助到剛接觸fragment的人。

在下一篇博客中我會使用Fragment+ViewPager寫一個動態加載數據庫的綜合的案例,歡迎大家查閱!








附件:http://down.51cto.com/data/2363603
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

称多县| 图片| 衢州市| 孝感市| 来安县| 馆陶县| 墨脱县| 旌德县| 碌曲县| 瑞金市| 聂拉木县| 宜丰县| 钟山县| 永昌县| 河津市| 岑溪市| 丹巴县| 兴安县| 威海市| 盐城市| 泰州市| 图片| 申扎县| 宜宾市| 永州市| 崇明县| 焉耆| 维西| 合川市| 宝应县| 兴安县| 图们市| 隆德县| 泰宁县| 阿克陶县| 夹江县| 洪洞县| 马龙县| 吉木乃县| 太仓市| 星子县|