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
Test.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); }
Get value:
Intent intent = getIntent();
final String num = intent.getStringExtra("Main");
Then pass value to main activityIntent 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