中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中Fragment如何使用

發布時間:2021-06-26 16:25:07 來源:億速云 閱讀:193 作者:Leah 欄目:移動開發

Android中Fragment如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1、概述

自API  11引入Fragment之后,Fragment可謂風靡一時,現在大部分項目都或多或少的用到了Fragment,其更輕量級,更加適用屏幕,更加方便UI設計等優勢。說了這么多什么是Fragment呢?

Fragment:碎片,碎片是一個應用程序的用戶界面和行為能夠被放置在一個活動上。在其核心,它代表了一個特定的操作或界面,運行在一個更大的活動上。代表界面是因為可作為View在布局中進行使用,代表特定操作是因為包含生命周期可進行邏輯操作。簡言之,Fragment就是一個帶生命周期的組件。(若有問題懇請指正!)

Fragment的特點:

  • 生命周期必須依賴于Activity,當Activity被銷毀,所有的碎片將被摧毀。(自己曾經踩坑)

  • 輕量級,輕量切換。

  • 方便處理平板、Phone的界面差異。

2、繼承結構和生命周期

繼承結構:  

Android中Fragment如何使用

Fragment直接繼承Object,有四個直接子類,我個人對它的子類使用甚少。

生命周期: 

Android中Fragment如何使用

Fragment的生命周期在圖上標注的很清楚了就不贅述了。該圖是很久之前收藏的,已忘記原出處,在此感謝原作者!

3、基本使用

1).靜態使用

靜態使用就是Fragment相當于控件一樣在布局中使用。

TestFragment.java 繼承Fragment重寫onCreateView方法

/**  * Created by magic on 2016年9月27日.  */ public class TestFragment extends Fragment {      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,             Bundle savedInstanceState) {         View view = inflater.inflate(R.layout.fragment_main, container);         ImageView img=(ImageView)view.findViewById(R.id.img);         img.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                 Toast.makeText(getActivity(),"這是一個fragment", Toast.LENGTH_SHORT).show();             }         });         return view;     }  }

fragment_main.xml

<RelativeLayout 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" >      <ImageView         android:id="@+id/img"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:src="@drawable/img" />  </RelativeLayout>

MainActivity.java 里面其實什么也沒干。

/**  * Created by magic on 2016年9月27日.  */ public class MainActivity extends Activity {      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);     }  }

activity_main.xml

<RelativeLayout 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" >      <fragment         android:id="@+id/id_fragment"         android:layout_width="match_parent"         android:layout_height="match_parent"         class="com.magic.test_fragment.TestFragment" />  </RelativeLayout>

使用 fragment 標簽添加碎片,通過class指定碎片的完整類名。

運行效果:

Android中Fragment如何使用Android中Fragment如何使用

2).動態使用

動態使用就是向Fragment布局容器中動態添加、替換、移除、隱藏、顯示Fragment。

CommonFragment.java

/**  * Created by magic on 2016年9月27日.通用Fragment  */ @SuppressLint("ValidFragment")  public class CommonFragment extends Fragment {      String desc;      public CommonFragment(String desc) {         super();         this.desc = desc;     }      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,             Bundle savedInstanceState) {         View view = inflater.inflate(R.layout.fragment_common, container, false);         TextView tev = (TextView) view.findViewById(R.id.tev);         System.out.println(desc);         tev.setText(desc);         return view;     }  }

通過構造方法傳遞數據的形式向TextView上設置內容。

fragment_common.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" >      <TextView         android:id="@+id/tev"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:gravity="center"         android:textColor="@color/mainOrange" />  </LinearLayout>

MainActivity.java

/**  * Created by magic on 2016年9月27日.底部tab+fragment  */ public class MainActivity extends Activity implements OnClickListener {      TextView tev_tab1, tev_tab2, tev_tab3, tev_tab4;      // fragment事務類     FragmentTransaction ft;     // fragment     CommonFragment tabFragment1, tabFragment2, tabFragment3, tabFragment4;      @SuppressLint("CommitTransaction")     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main2);         initView();          ft = getFragmentManager().beginTransaction();          tabFragment1 = new CommonFragment("Tab1");         // 替換         ft.replace(R.id.container, tabFragment1);         // 提交         ft.commit();     }      // 初始化控件     private void initView() {         tev_tab1 = (TextView) findViewById(R.id.tev_tab1);         tev_tab2 = (TextView) findViewById(R.id.tev_tab2);         tev_tab3 = (TextView) findViewById(R.id.tev_tab3);         tev_tab4 = (TextView) findViewById(R.id.tev_tab4);          tev_tab1.setOnClickListener(this);         tev_tab2.setOnClickListener(this);         tev_tab3.setOnClickListener(this);         tev_tab4.setOnClickListener(this);     }      @Override     public void onClick(View v) {          FragmentTransaction ft = getFragmentManager().beginTransaction();          switch (v.getId()) {         case R.id.tev_tab1:             ft.replace(R.id.container, tabFragment1);             break;         case R.id.tev_tab2:             if (tabFragment2 == null) {                 tabFragment2 = new CommonFragment("Tab2");             }             ft.replace(R.id.container, tabFragment2);             break;         case R.id.tev_tab3:             if (tabFragment3 == null) {                 tabFragment3 = new CommonFragment("Tab3");             }             ft.replace(R.id.container, tabFragment3);             break;         case R.id.tev_tab4:             if (tabFragment4 == null) {                 tabFragment4 = new CommonFragment("Tab4");             }             ft.replace(R.id.container, tabFragment4);             break;         }         // 提交         ft.commit();     }  }

activity_main2.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" >      <FrameLayout         android:id="@+id/container"         android:layout_width="match_parent"         android:layout_height="0dp"         android:layout_weight="1" />      <LinearLayout         android:layout_width="match_parent"         android:layout_height="50dp"         android:background="@color/mainTextBlack"         android:orientation="horizontal" >          <TextView             android:id="@+id/tev_tab1"             android:layout_width="0dp"             android:layout_height="match_parent"             android:layout_weight="1"             android:gravity="center"             android:text="Tab1"             android:textColor="@color/white" />          <TextView             android:id="@+id/tev_tab2"             android:layout_width="0dp"             android:layout_height="match_parent"             android:layout_weight="1"             android:gravity="center"             android:text="Tab2"             android:textColor="@color/white" />          <TextView             android:id="@+id/tev_tab3"             android:layout_width="0dp"             android:layout_height="match_parent"             android:layout_weight="1"             android:gravity="center"             android:text="Tab3"             android:textColor="@color/white" />          <TextView             android:id="@+id/tev_tab4"             android:layout_width="0dp"             android:layout_height="match_parent"             android:layout_weight="1"             android:gravity="center"             android:text="Tab4"             android:textColor="@color/white" />     </LinearLayout>  </LinearLayout>

通過 FrameLayout  標簽創建Fragment的容器,底部四個Tab添加監聽事件用于動態更換FrameLayout容器中的Fragment。

運行效果:

Android中Fragment如何使用

4、相關類及主要方法

FragmentManager碎片管理器,抽象類,具體實現在Android-support-v4.jar中的FragmentManagerImpl類中。

// 獲取FragmentManager對象 FragmentManager manager = getFragmentManager();

FragmentTransaction碎片事務類,抽象類,具體實現在BackStackRecord類中。添加、刪除、替換等操作其實最終的實現還是在FragmentManagerImpl類中。

// 獲取FragmentTransaction對象         FragmentTransaction transaction = manager.beginTransaction();          // 添加fragment         transaction.add();         transaction.add(containerViewId, fragment, tag);         // 將被添加到容器的現有fragment替換         transaction.replace();         // 刪除一個現有的fragment         transaction.remove();          // 保存當前fragment數據,避免視圖重繪         transaction.hide();         // 顯示以前隱藏的fragment         transaction.show();         // 這兩個方法會觸發fragment中的onHiddenChanged(boolean hidden)回調          // 顯示之前數據 實例不會被銷毀,但是視圖層次依然會被銷毀,即會調用onDestoryView和onCreateView         transaction.addToBackStack(null);         // 事務提交         transaction.commit();

Fragment 碎片類

Fragment fragment = new Fragment();          // 返回此fragment當前關聯的Activity         fragment.getActivity();         // 設置數據         fragment.setArguments(new Bundle());         // 獲取數據         fragment.getArguments();         // 返回與該fragment作用的FragmentManager         fragment.getFragmentManager();         // 獲取標簽名         fragment.getTag();          // 當隱藏狀態改變的時候回調         // onHiddenChanged(true);

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

AI

霞浦县| 兴文县| 唐山市| 延边| 桓仁| 裕民县| 道孚县| 天柱县| 庆城县| 沙洋县| 哈尔滨市| 阳信县| 七台河市| 灵武市| 来宾市| 原平市| 湖南省| 山东| 含山县| 镇康县| 高雄市| 淮滨县| 吉隆县| 阜城县| 霍山县| 罗田县| 南投市| 莎车县| 介休市| 襄汾县| 黄骅市| 离岛区| 黄龙县| 雅江县| 邹城市| 泌阳县| 五家渠市| 凤冈县| 繁昌县| 清徐县| 沙坪坝区|