1. 程式人生 > >Android:Activity+Fragment及它們之間的資料交換

Android:Activity+Fragment及它們之間的資料交換

簡介:

為什麼要用Fragment?使用Fragment可以在一個Activity中實現不同的介面。Fragment與Fragment之間的動畫切換,遠比Activity與Activity之間的動畫切換變化方式多。很多時候,我們通過使用一個Activity,切換多個Fragment。本次部落格,主要列舉一下Fragment與它的Activity之間進行資料交換的方式。

1.Fragment中通過getActivity()然後進行強制轉化,呼叫Activity中的公有方法

((XXXXActivity)getActivity()).fun();

2.Activity在切換Fragment的時候,通過setArguments向Fragment傳遞引數,Fragment通過getArguments();獲得從activity中傳遞過來的值

3.Activity實現一個介面,Fragment在onAttach方法中,將該Activity轉化為該介面,在需要呼叫的時候回撥。

注意:本Demo是通過FragmentManager來管理Fragment的,通過FragmentManager管理,我們建立Fragment和銷燬Fragment的時候,可以通過棧的方式:

a.FragmentTransaction的add方法,新增一個Fragment

b.FragmentTransaction的popBackStack()彈出該Fragment

演示例項:

fragment1.xml

  1. <
    RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:background="#FFFFFFFF"
  6.     android:paddingBottom="@dimen/activity_vertical_margin"
  7.     android:paddingLeft
    ="@dimen/activity_horizontal_margin"
  8.     android:paddingRight="@dimen/activity_horizontal_margin"
  9.     android:paddingTop="@dimen/activity_vertical_margin"
  10.     tools:context="com.example.testfragment.MainActivity$PlaceholderFragment">
  11.     <TextView
  12.         android:id="@+id/tv"
  13.         android:layout_width="wrap_content"
  14.         android:layout_height="wrap_content"
  15.         android:layout_alignParentTop="true"
  16.         android:text="fragment1"/>
  17.     <Button
  18.         android:id="@+id/btn"
  19.         android:layout_width="wrap_content"
  20.         android:layout_height="wrap_content"
  21.         android:layout_below="@id/tv"
  22.         android:text="跳轉到Fragment2"/>
  23. </RelativeLayout>

MyFragment1.java
  1. /* 
  2.  * $filename: MyFragment.java,v $ 
  3.  * $Date: 2014-5-16  $ 
  4.  * Copyright (C) ZhengHaibo, Inc. All rights reserved. 
  5.  * This software is Made by Zhenghaibo. 
  6.  */
  7. package com.example.testfragment;  
  8. import android.app.Activity;  
  9. import android.os.Bundle;  
  10. import android.support.v4.app.Fragment;  
  11. import android.view.LayoutInflater;  
  12. import android.view.View;  
  13. import android.view.View.OnClickListener;  
  14. import android.view.ViewGroup;  
  15. import android.widget.Button;  
  16. /* 
  17.  *@author: ZhengHaibo   
  18.  *web:     http://blog.csdn.net/nuptboyzhb 
  19.  *mail:    [email protected] 
  20.  *2014-5-16  Nanjing,njupt,China 
  21.  */
  22. publicclass MyFragment1 extends Fragment {  
  23.     FragmentCallBack fragmentCallBack = null;  
  24.     Button btn;  
  25.     @Override
  26.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  27.             Bundle savedInstanceState) {  
  28.         View rootView = inflater.inflate(R.layout.fragment1, container,  
  29.                 false);  
  30.         btn = (Button)rootView.findViewById(R.id.btn);  
  31.         btn.setOnClickListener(new OnClickListener() {  
  32.             @Override
  33.             publicvoid onClick(View v) {  
  34.                 // TODO Auto-generated method stub
  35.                 fragmentCallBack.callbackFun1(null);  
  36.             }  
  37.         });  
  38.         return rootView;  
  39.     }  
  40.     @Override
  41.     publicvoid onAttach(Activity activity) {  
  42.         // TODO Auto-generated method stub
  43.         super.onAttach(activity);  
  44.         fragmentCallBack = (MainActivity)activity;  
  45.     }  
  46. }  

fragment2.xml
  1. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:background="#FFFFFFFF"
  6.     android:paddingBottom="@dimen/activity_vertical_margin"
  7.     android:paddingLeft="@dimen/activity_horizontal_margin"
  8.     android:paddingRight="@dimen/activity_horizontal_margin"
  9.     android:paddingTop="@dimen/activity_vertical_margin"
  10.     tools:context="com.example.testfragment.MainActivity$PlaceholderFragment">
  11.     <TextView
  12.         android:id="@+id/tv"
  13.         android:layout_width="wrap_content"
  14.         android:layout_height="wrap_content"
  15.         android:layout_alignParentTop="true"
  16.         android:text="fragment2"/>
  17.     <Button
  18.         android:id="@+id/btn1"
  19.         android:layout_width="wrap_content"
  20.         android:layout_height="wrap_content"
  21.         android:layout_below="@id/tv"
  22.         android:text="直接呼叫Activity"/>
  23.     <Button
  24.         android:id="@+id/btn2"
  25. 相關推薦

    Android:Activity+Fragment它們之間資料交換

    簡介: 為什麼要用Fragment?使用Fragment可以在一個Activity中實現不同的介面。Fragment與Fragment之間的動畫切換,遠比Activity與Activity之間的動畫切換變化方式多。很多時候,我們通過使用一個Activity,切換

    MFC拆分視窗它們之間資料交換

    CSplitterWnd類 CSplitterWnd類提供一個分隔器視窗的功能,分隔器視窗是一個包含有多個窗格的視窗。窗格通常是應用程式特定的由CView派生的物件,但它也可以是具有適當子視窗ID的

    Android Activity/Fragment 生命週期自學整理 還有RecyclerAdapter

    Activity/Fragment生命週期圖 轉自 https://www.cnblogs.com/purediy/p/3276545.html Activity oncreate()方法,來初始化子項(控制元件,資料) onpause()方法,釋放記憶體 o

    Android Activity/Fragment 生命週期自學整理

    Activity/Fragment生命週期圖 Activity oncreate()方法,來初始化子項(控制元件,資料) onpause()方法,釋放記憶體 ondestory() 方法 ,銷燬前呼叫 Fragment oncreateview()

    java 介面、抽象類、具體類、內部類、匿名內部類的區別它們之間的關係

    其實java內部類也是一個類,與其他類不同的是內部類是類中類,它的作用範圍只能在這個類中。 java 匿名內部類: 匿名內部類的定義語法如下: new 父類構造器(引數列表)|實現介面() { //匿名內部類的類體部分 } 雖然看上去很簡單,但是還有一

    幾種常見的排序演算法它們之間的比較

    1.穩定性比較 插入排序、氣泡排序、二叉樹排序、二路歸併排序及其他線形排序是穩定的 選擇排序、希爾排序、快速排序、堆排序是不穩定的 2.時間複雜性比較 插入排序、氣泡排序、選擇排序的時間複雜性為O(n2) 其它非線形排序的時間複雜性為O(nlog2n) 線形排序的

    dm81xx link記憶體分配link之間資料傳遞

    ======================================== 轉載:http://www.aiuxian.com/article/p-2695138.html ======================================

    List、Set、Map集合最常用六個子類它們之間的區別詳解(含經典面試題)

    集合: 在程式設計中,我們需要管理很多物件集,比如某班全部的同學資訊,某個公司的人員資料等等。JAVA集合就是提供某種資料結構的支援,即存放物件,並讓這些物件按照某種資料結構存放。 集合與陣列的區別: 1. 陣列存放的元素個數是在定義陣列時固定的。

    GTK多視窗的建立視窗之間資料的互動

    在用gtk寫圖形介面時,往往會遇到需要用的構件比較多,一個視窗放不下的情況,此時可以考慮使用多個視窗。 gtk建立視窗很方便,呼叫gtk_window_new()就可以,需要多視窗時順手新建一個即可。很奇怪關於gtk多視窗的資料並不多,也許是因為方法太顯而易見了吧 本文程式

    Android activity堆疊管理例項詳解

    本文轉載出處:http://www.jb51.net/article/92208.htm 本示例演示如何通過設定Intent物件的標記,來改變當前任務堆疊中既存的Activity的順序。 1. Intent物件的Activity啟動標記說明:

    Kotlin/DSL(Anko),原汁原味Kotlin開發Android---Activity Fragment與AnkoUI分離,強大的複用,更加便捷的開發

    /寫在前面翻開自己的CSDN,已經很久很久沒有活動了,最近的關於PDF簽章的部落格還是16年寫的。將近年關,工作內容階段性告一段落,終於有時間寫一下自己的東西。廢話少說,說說Kotlin。kotlin開發者給kotlin的定位---不是用來取代任何一種語言,而是 讓開發者有更

    Android activity+fragment+viewpager滑動頁面實現之TabLayout

    build.gradle新增依賴 compile('com.android.support:design:25.1.1') { force = true } 新增依賴之後如果有報錯。可參考 MyFragmentAdapter public class My

    oracle 同一個資料庫,不同使用者之間資料交換

    現有同一oracle下的兩使用者user1和user2,現在想把user1的表tb的結構複製到user2下   一、建立dblink交換資料 create database link createDbLinkNameUser1 connect to  user1LinkDa

    PC和Android模擬器訪問模擬器之間tcp/udp通訊

    Android系統預設只能通過IP(10.0.2.2)單向訪問PC電腦,而PC電腦不能通過IP來直接訪問Android模擬器系統。要想實現PC電腦和Android模擬器系統以及Android模擬器之間相互通訊必須藉助埠重定向(redir)來實現。 先說說埠重定向所需要的telnet客戶端安裝: windo

    Android實現FragmentActivity之間資料互動

    1概念 1 為什麼 因為Fragment和Activity一樣是具有生命週期,不是一般的bean通過建構函式傳值,會造成異常。 2 參考連結 Activity和Fragment傳遞資料的兩種方式 【Fragment精深系列4】Frag

    Android ActivityFragment之間資料傳遞和返回

    Activity之間通過Intent傳遞資料 Intent intent = new Intent(this, TwoActivity.class); intent.putExtra("key", "value");

    AndroidActivityFragment之間資料相互傳遞

    一、Activity啟動Activity Intent intent = new Intent(this,MainListActivity.class); startActivity(intent); Activity與Activity傳遞資料 I

    關於Android Activity之間傳遞資料的6種方式

    使用Inten的putExtra傳遞 第一個Activity中 ? 1 2 3 4 5 6 //建立意圖物件  Intent intent = new Intent(this,TwoActivity.class);  //設定傳

    Android進階2之Activity之間資料交流(onActivityResult的用法)

                    主要功能:在一個主介面(主Activity)上能連線往許多不同子功能模組(子Activity上去),當子模組的事情做完之後就回到主介面,或許還同時返回一些子模組完成的資料交給主Activity處理。這樣的資料交流就要用到回撥函式onActivityResult。<1>

    android Activity之間資料傳遞 Parcelable和Serializable介面的使用

    Activity之間傳資料時,為了避免麻煩,往往會將一些值封裝成物件,然後將整個物件傳遞過去。傳物件的時候有兩種情況,一種是實現Parcelable介面,一種是實現Serializable介面。 0、解釋兩種介面: 1)實現Serializable介面是JavaSE本身就支