1. 程式人生 > >android activity 相互傳值

android activity 相互傳值

傳遞單個簡單型別的情況:

Main.activity

Pass value:

Intent intent = newIntent(MainActivity.this,SecondActivity.class);
intent.putExtra("Main","123");
startActivityForResult(intent, 0);

Get value from other activity

@Override
protectedvoid onActivityResult(int requestCode,int resultCode, Intent data) {
if (resultCode ==RESULT_OK)
{
Log.d("debug","result=" + data.getStringExtra("second"));
}
super.onActivityResult(requestCode, resultCode, data);
}
Test.activity

Get value:

Intent intent = getIntent();
final String num = intent.getStringExtra("Main");
Then pass value to main activity
Intent intent = newIntent();
intent.putExtra("second","This is Second Activity's value!");
setResult(RESULT_OK, intent);
finish();

傳遞多個簡單型別的情況:

使用 Bundle打包的方式:

Pass value:

Home Activity:

Bundle bundle = new Bundle();

*字元、字串、布林、位元組陣列、浮點數等等,都可以傳*/
bundle.putString("Name", "feng88724");
bundle.putBoolean("Ismale", true);

/*把bundle物件assign給Intent*/
intent.putExtras(bundle);

Get value:

Away Activity:

/*獲取Intent中的Bundle物件*/
Bundle bundle = this.getIntent().getExtras();

*獲取Bundle中的資料,注意型別和key*/
String name = bundle.getString("Name");
boolean ismale = bundle.getBoolean("Ismale");

傳物件

有三種常用方法:

Serializable 方式

這是最簡單的一種方法,因為我們要做的就是讓我們自定義的物件實現 Serializable這個空介面。

public class Person implements Serializable{
        private String mName;
        private String mAddress;

        public String getName() {
            return mName;
     }

     public void setName(String name) {
             mName = name;
     }

        public String getAddress() {
             return mAddress;
        }

        public void setAddress(String address) {
             mAddress = address;
        }
}

構造了實現Serializable介面的物件模型之後,就藉助Intent的putExtra方法將建立的Person物件傳遞出去

Person person = new Person();
            person.setName("Hwaphon");
            person.setAddress("Anhui");

            Intent intent = new Intent(MainActivity.this,SecondActivity.class);
            intent.putExtra("person",person);
            startActivity(intent);
            finish();

接收資料的方法與上面使用Bundle類的類似:

Intent intent = getIntent();
Person person = (Person) intent.getSerializableExtra("person");

使用Serializable方法雖然十分簡單,但是效率卻不容樂觀,因為它會把整個物件序列化,開銷十分大,為了追求效率,我們不得不使用另一種方法,也就是Parcelable 方法。

Parcelable 方式

自定義類實現Parcelable介面,必須重寫兩個方法

1.describeContents(): 用於描述內容介面,一般直接 return 0即可

2.writeToParcel() : 用於將想要傳遞的資料寫入到Parcel容器中。

除了這兩個方法以外,我們還需要建立一個 Parcelable.Creator介面的實現,這個介面中也需要我們實現兩個方法

1.createFromParcel() : 用於將寫入Parcel容器中的資料讀出來,用讀出來的資料例項化一個物件,並且返回。

2.newArray() :建立一個長度為 size 的陣列並且返回,一般而言,直接返回return T[size] 即可。

public class Person implements Parcelable{
        private String mName;
        private String mAddress;

        public String getName() {
            return mName;
     }

        public void setName(String name) {
            mName = name;
     }

        public String getAddress() {
             return mAddress;
        }

        public void setAddress(String address) {
            mAddress = address;
        }

    @Override
    public int describeContents() {
            return 0;
        }

        @Override
    public void writeToParcel(Parcel parcel, int i) {
            parcel.writeString(mName);
            parcel.writeString(mAddress);
        }

    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>(){
            @Override
             public Person createFromParcel(Parcel parcel) {
                    Person person = new Person();
                    person.mName = parcel.readString();
                    person.mAddess = parcel.readString();
                    return person;
            }

            @Override
            public Person[] newArray(int i) {
                    return new Person[i];
            }
     };
}

接收資料物件的方法稍有不同

Intent intent = getIntent();
Person person = (Person) intent.getParcelableExtra("person");
注意1:在writeToParcel()方法中,我們可以將我們想要的資料寫入容器,如果是我們不需要的資料,那麼我們可以放棄寫入,這也是Parcelabel 方法比 Serializable方法高效的原因所在。注意2:使用Parcelable介面實現按需讀寫,要求我們讀資料的順序必須要和寫資料的順序要一致,否則就會拋異常!注意3:Parcelable介面顯然比Serializable 介面實現程式碼多,可以使用外掛一鍵生成這些程式碼,比如說 Android Parcelable code generator 外掛,可以直接在Android Studio Plugins去下載該外掛,下載完之後 點選 Alt+Insert就可以看到Parcelable選項

JSON 方式

首先是依賴Gson庫,但它不過是另一種序列化的方式而已,至於區別,就是資料類不需要實現任何的額外介面,程式碼看著很清晰明瞭
public class Person{
        private String mName;
        private String mAdress;

    public String getName() {
            return mName;
        }

        public void setName(String name) {
            mName = name;
        }

        public String getAdress() {
            return mAdress;
     }

        public void setAdress(String adress) {
            mAdress = adress;
        }
    }
傳遞資料的方式:
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("person",new Gson().toJson(person));
接收資料的方式:
Intent intent = getIntent();
String JsonData = intent.getStringExtra("person");
Person person = new Gson().fromJson(JsonData,Person.class);

相關推薦

android activity 相互

傳遞單個簡單型別的情況:Main.activityPass value:Intent intent = newIntent(MainActivity.this,SecondActivity.class); intent.putExtra("Main","123"); star

Android中WebView載入本地Html,與JavaScript與Android方法相互

最近在做專案中,要使用HightChart來實現心電圖,於是,使用WebView載入本地html頁面,但是資料是通過藍芽裝置採集的資料,用Java程式碼獲取的資料,需要將資料傳到JavaScript中去,使用來繪製心電圖。以前都載入伺服器端返回的url地址,使用

Android中WebView載入本地Html,與JavaScript與Android方法相互(續)

接著上篇Android中WebView載入本地Html,與JavaScript與Android方法相互傳值,今天來一篇續集,為什麼要來續集呢,感覺自己還有沒有交代完的部分,於是在這裡再次交代一下,在Android中我們需要將給複雜的資料傳到Html頁面,我們該怎

Android自定義view與activity

重復 轉動 自定義 activit 廣播 內部 代碼 view 等待 昨晚在寫團隊項目的時候,遇到一個問題,直到今天早上才解決。。。即在自定義view“轉盤”結束轉動後獲取結果的處理中,我是想吧值傳到activity中的一個textview中的,但我的自定義view類不是a

Android中關於Activity之間的問題(基礎問題)

也是Android中的一種基礎知識點吧,希望還是幫助理解吧,雖然簡單點了,獻給需要的人群,僅供參考。 關於兩個Activity之間傳值的問題,首先要搞清楚兩個activity那個是父類,那個是子類,通常父類是想要結果,而讓子類幫他處理,做完以後將結果回傳給父類,我的父類是Z

Android Studio——使用Bundle在Activity之間

前面我們瞭解瞭如何啟動一個Activity,一個Activity在啟動另外一個Activity的時候可能會遇到需要傳值的需要。Activity之間傳值是通過Bundle來實現的。 一、通過Bundle傳值介紹 Intent提供了多個過載方法來攜帶資料

Android 元件系列-----Activity和回傳

在這篇隨筆裡將講解Activity的傳值和回傳值。 一、通過startActivity來進行Activity的傳值 在Android中,如果我們要通過一個Activity來啟動另一個Activity,可以使用 startActivity(Intent intent)方法來

Android 中Service 和Activity之間。(涉及BroadCast的基本用法)

首先先建立一個Android工程(名字自定義)這裡我命名為MyActivity 包名為:package org.hm.myactivity; 再最後給自己的activity命名(名字自定義)此處我命名為MyTestActivity public class MyTestA

Android 元件系列之Activity和回傳

在這篇隨筆裡將講解Activity的傳值和回傳值。 一、通過startActivity來進行Activity的傳值 在Android中,如果我們要通過一個Activity來啟動另一個Activity,可以使用 startActivity(Intent intent)方法來

Activity和Fragment之間相互和呼叫方法

1。Activity—>Fragment 用Bundle傳值, ... BlankFragment fragment = new BlankFragment(); Bundle args = new Bundle()

Android】安卓開發之activity如何到fragment,activity與fragment

作者:程式設計師小冰,GitHub主頁:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家知道,我們利用acti

Android 四大元件之 Activity(2)--

Activity 之間的資料傳輸 1.  Intent 直接傳值 第一個頁面傳值的方法 Intent intent = new Intent(); intent.putExtra("one", num1); intent.putEx

Adapter,Fragment向所屬的activity

activit .sh use 點擊 rri hold pan col avatar 1、在adapter或fragment中定義接口   如:   public interface LongClickListener {       void getClickNam

Activity的方式

官方 serializa 例如 代碼 nds creat ont fin idg 原文地址:https://blog.csdn.net/qq_33748378/article/details/53023036 Activity間的跳轉: 要了解Activity間的傳值,

vue插槽,也就是子頁面、父頁面相互的另一寫法

style def com data component rop 頁面 ret slot 父頁面: <template> <div class="parent"> <p>父組件</p> <child> &l

android webview JS prompt

near gravity should 使用 sre pen you eat fir 1. <!DOCTYPE html> <html style="min-height: 100%"> <head> <meta cha

Android中Intent的幾種方法

1.使用putextra    Intent intent = new Intent(); intent.putExtra("test","asdf"); intent.se

C#中WinForm窗體間相互的幾種方法

本文最早釋出在百度空間裡,但百度空間取消了,轉到這裡來。文章雖然有點老,但對學習C#的小夥伴應該還用得上。 1.通過建構函式 特點:傳值是單向的(不可以互相傳值),實現簡單 實現程式碼如下: 在窗體Form2中 int value1; string value2;

vue基礎語法以及父子元件如何相互

vue模板引擎語法,關注資料層面 Mustache語法:{{msg}} 主要是用date控制 html賦值:v-html=”“ 繫結屬性:v-bind:id=”“ 使用表示式:{OK?”yes”:”NO”} 文字賦值:v-text=”“ 指令:v-if=”“ 過

實現ajax後臺與前臺的相互與(地址需轉碼後

首先需要導包 commons-beanutils-1.7.0.jar commons-collections-3.2.1.jar commons-lang-2.3.jar commons-lang3-3.1.jar commons-logging-1.0.4.jar 後臺接受前臺需用set