1. 程式人生 > >Activity的傳值的幾種方式

Activity的傳值的幾種方式

開發過程中頁面和頁面之間傳遞資料示最長遇到的。下面我們來研究下activity之間傳遞資料的幾種方式.

1、通過application實現傳遞資料

2、activity之間的回傳值(startActivityForResult())

3、用intent進行傳值

一、通過application實現傳遞資料

BaseApplication中

public class BaseApplication extends Application{
private static final String tag="BaseApplication";
private static BaseApplication mInstance;


public List<String> pathlist = new ArrayList<String>();

@Override
public void onCreate() {
LogUtil.i(tag, "----------onCreate:");
super.onCreate();
mInstance = this;
//initCrashHandle();
}

public static BaseApplication getInstance() {
return mInstance;
}

}

放值進BaseApplication:

        private ArrayList<ImageItem> dataList;

        BaseApplication application = BaseApplication.getInstance();
        application.dataList = dataList;

從BaseApplication中取值:

        private ArrayList<ImageItem> dataList;

        BaseApplication application = BaseApplication.getInstance();
dataList = application.dataList;


二、使用startActivityForResult()進行回傳值


跳轉的時候用

Intent intentC = new Intent(this, BActivity.class);

/**
 * 跳轉目標Activity,並獲取返回值
* 第一個引數:意圖物件,包含所需要跳轉的Activity
* 第二個引數:請求值
 */
startActivityForResult(intentC, REQUEST_CODE_TO_C);

BActivity中適當的時候設定setResult()

Intent resultIntent = new Intent();
resultIntent.putExtra("resutlt", result);

//第一個引數示返回碼,第二個引數示intent
setResult(1, resultIntent);

原activity中取資料/做相應的操作

/**
* 在此方法中接受目標Activity返回的值,並進行相應的處理
* 第一個引數:請求碼
* 第二個引數:結果碼
* 第三個引數:目標Activity返回的Intent物件
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
android.util.Log.e("MainActivity", "onActivityResult");

if (requestCode == REQUEST_CODE_TO_B) {
if (resultCode == 1) {
String content = data.getStringExtra("message");
TextView textView = (TextView) findViewById(R.id.text_Main);
textView.setText("content is : " + content);
} else if(resultCode == -1){
TextView textView = (TextView) findViewById(R.id.text_Main);
textView.setText("content is : " + " 有可能你的請求引數有錯誤");
}
} else if(requestCode == REQUEST_CODE_TO_C){
if(resultCode == -1){
TextView textView = (TextView) findViewById(R.id.text_Main);
textView.setText("content is : " + "引數有問題");
} else if (resultCode == 1){
String content = data.getStringExtra("msg");
TextView textView = (TextView) findViewById(R.id.text_Main);
textView.setText("content is : " + content);
}

}
}

三、用intent進行傳值

intent可以傳遞5中基本資料型別、Bundle型別、Serialiable物件、Parcrlable物件

intent傳遞Serialiable物件:

Intent intentD = new Intent(this, DActivity.class);
Bundle bun = new Bundle();
Person p = new Person("jack", 20);
bun.putSerializable(PERSON, p);
intentD.putExtras(bun);
startActivity(intentD);

接收Serialiable物件:

Person p = (Person) getIntent().getExtras().getSerializable(MainActivity.PERSON);
String name = p.name;
int age = p.age;

注:Person類及其中的子類必須實現Serialiable介面,

import java.io.Serializable;


public class Person implements Serializable{

public String name = "";
public int age = 0;

public Person(String name, int age){
this.name = name;
this.age = age;
}


}

Intent傳遞Parcelable物件

Parcelable序列化了的POJO類:

  1. /** 
  2.  *  
  3.  */
  4. package com.aaron.util;  
  5. import android.os.Parcel;  
  6. import android.os.Parcelable;  
  7. /** 
  8.  * @author aaron 
  9.  *  
  10.  */
  11. publicclass Model implements Parcelable {  
  12.     privateint month;  
  13.     privatefloat total;  
  14.     private String store;  
  15.     /** 
  16.      * @return the month 
  17.      */
  18.     publicint getMonth() {  
  19.         return month;  
  20.     }  
  21.     /** 
  22.      * @param month 
  23.      *            the month to set 
  24.      */
  25.     publicvoid setMonth(int month) {  
  26.         this.month = month;  
  27.     }  
  28.     /** 
  29.      * @return the total 
  30.      */
  31.     publicfloat getTotal() {  
  32.         return total;  
  33.     }  
  34.     /** 
  35.      * @param total 
  36.      *            the total to set 
  37.      */
  38.     publicvoid setTotal(float total) {  
  39.         this.total = total;  
  40.     }  
  41.     /** 
  42.      * @return the store 
  43.      */
  44.     public String getStore() {  
  45.         return store;  
  46.     }  
  47.     /** 
  48.      * @param store 
  49.      *            the store to set 
  50.      */
  51.     publicvoid setStore(String store) {  
  52.         this.store = store;  
  53.     }  
  54.     @Override
  55.     publicint describeContents() {  
  56.         // TODO Auto-generated method stub
  57.         return0;  
  58.     }  
  59.     @Override
  60.     publicvoid writeToParcel(Parcel dest, int flags) {  
  61.         // TODO Auto-generated method stub
  62.         dest.writeInt(month);  
  63.         dest.writeString(store);  
  64.         dest.writeFloat(total);  
  65.     }  
  66.     publicstaticfinal Parcelable.Creator<Model> CREATOR = new Parcelable.Creator<Model>() {  
  67.         @Override
  68.         public Model createFromParcel(Parcel source) {  
  69.             // TODO Auto-generated method stub
  70.             Model model = new Model();  
  71.             model.month = source.readInt();  
  72.             model.store = source.readString();  
  73.             model.total = source.readFloat();  
  74.             return model;  
  75.         }  
  76.         @Override
  77.         public Model[] newArray(int size) {  
  78.             // TODO Auto-generated method stub
  79.             returnnew Model[size];  
  80.         }  
  81.     };  
  82. }  


Parcelable序列化Parcelable序列化需要注意的是,需要過載describeContents()、writeToParcel(Parcel dest, int flags)、Parcelable.Creator<Model> CREATOR = new Parcelable.Creator<Model>()這三個方法。

Parcelable資料傳遞程式碼:

  1. //Parcelable實現序列化傳送資料
  2.         Intent intent = new Intent();  
  3.         intent.putParcelableArrayListExtra("Model", (ArrayList<? extends Parcelable>) list);  
  4.         intent.setClass(NetClientDemoActivity.this, HelloAchartengineActivity.class);  

Parcelable接收資料程式碼:

  1. //通過Parcelable反序列化獲取資料
  2.         Intent intent = getIntent();  
  3.         List<Model> list = intent.getParcelableArrayListExtra("Model");  
  4.         String[] titles = new String[]{list.get(0).getStore()};  

相關推薦

swift詳解之二十二-----------UINavigationController的基本用法和頁面方式

UINavigationController的基本用法和頁面傳值幾種方式 本文介紹UINavigationController基本用法,因為涉及多頁面順便介紹頁面傳值 1、手寫程式碼建立UINavigationController 手寫方式建立很簡

Android activity間通訊方式

read flag 進程 destroy ads sage on() sting ogl Activity 通訊 Bundle 我們可以通過將數據封裝在Bundle對象中 ,然後在Intent跳轉的時候攜帶Bundle對象 bundle 本質上是使用 arrayMap實現

檔案上方式

一、springmvc中的檔案上傳 1.配置檔案 (1).pom檔案,檔案上傳主要需要如下幾個jar包 <dependency> <groupId>org.springframework</groupId>

web 檔案上方式

問題 檔案上傳在WEB開發中應用很廣泛。 檔案上傳是指將本地圖片、視訊、音訊等檔案上傳到伺服器上,可以供其他使用者瀏覽或下載的過程。 以下總結了常見的檔案(圖片)上傳的方式和要點處理。 表單上傳 這是傳統的form表單上傳,使用form表單的input[type=”file”]控制元

Activity退出的方式

在android中使用:[activityname].this.finish(); 只是退出了activity的堆疊中,要真正的退出程式在手機cpu中的執行,當應用不再使用時,通常需要關閉應用,可以使用以下三種方法關閉android應用: 一 使用kil

頁面值得方式

一、 使用QueryString變數 QueryString是一種非常簡單也是使用比較多的一種傳值方式,但是它將傳遞的值顯示在瀏覽器的位址列中,如果是傳遞一個或多個安全性要求不高或是結構簡單的數值時,可以使用這個方法。 Response.Redirect( "target.a

Activity方式

獲取值 類名 star out override *** 演示 rac 技術分享 ***Activity的傳值 *第一種:Intent傳值 主xml文件中設置按鈕,點擊跳轉: <Button android:layout_width="wrap_conten

Activity 之間方式

二、通過startActivityForResult方法來得到Activity的回傳值 在一些情況下,我們通過 A activity跳轉到 B activity上,這時希望 A activtiy能從 B activity上得到一些返回值,這個時候我們就不能使用startActivity方法了,而是使用 st

Activity方式

開發過程中頁面和頁面之間傳遞資料示最長遇到的。下面我們來研究下activity之間傳遞資料的幾種方式. 1、通過application實現傳遞資料 2、activity之間的回傳值(startActivityForResult()) 3、用intent進行傳值 一、通過ap

ASP.Net中頁面方式

webconfig local 區別 重啟 Nid 傳遞對象 app too BE 大致概括一下,ASP.NET 頁面之間傳遞值得方式大致可以分為如下幾種:Request.QueryString["name"],Request.Form("name"),Session,Co

小程序頁面方式

get 頁面傳值 targe eve url傳值 () pre itl 存取 1. url傳值 list.wxml: <view class="playIcon"> <image src="../../iconfont/play_ini

【springmvc】方式&&postman接口測試

red ews 參數 一點 名稱 each comment PQ 分享圖片 最近在用postman測試postman接口,對於springmvc傳值這一塊,測試了幾種常用方式,總結一下。對於postman這個工具的使用也增加了了解。p

react之傳遞資料的方式props、路由、狀態提升、redux、context

react之傳遞資料的幾種方式 1、父子傳值 父傳值:<子的標籤 value={'aaa'} index={'bbb'}></子的標籤> 子接值:<li key={this.props.index}>{this.props.value}</li>

微信小程序方式

存儲 全局 定義 tar ase 點擊 url 方式 this 第一種:通過鏈接傳值(跳轉頁面傳值) index.wxml <view>{{ msg }}</view> <button bindtap="clickMe">點擊我<

前端ajax非同步以及後端接收引數的方式

原文參考 非同步傳值 前臺往後臺傳值呢,有很多種方式,大家聽我細細道來。 第一種呢,也是最簡單的一種,通過get提交方式,將引數在連結中以問號的形式進行傳遞。 // 前臺傳值方法 // 觸發該方法呼叫ajax function testAjax(yourData) {

SpringMVC作用域方式

index.jsp頁面: request:${requestScope.req}<br/> session:${sessionScope.session }<br/> sessionParam:${sessionScope.sessionParam

vue中頁面跳轉方式

一、router-link URL路徑:http://localhost:8081/#/test?userid=1 <router-link :to="{path:'/test',query: {userid: id}}">跳轉</router

前端ajax異步以及後端接收參數的方式

ping 回調 button 進行 到你 del 後臺 log 註意 原文參考 異步傳值 前臺往後臺傳值呢,有很多種方式,大家聽我細細道來。 第一種呢,也是最簡單的一種,通過get提交方式,將參數在鏈接中以問號的形式進行傳遞。 // 前臺傳值方法 // 觸發該方法調

SpringMvc前後端方式

從JSP頁面傳遞值到controller層的方式 直接將請求引數名作為controller中方法的形參 使用@RequestParam 繫結請求引數值(推薦使用) 用註解@RequestMapping接收引數的方法 使用POJO

.NET頁面之間方式總結

 1、  QueryString 當頁面上的form以get方式向頁面傳送請求資料時,web server將請求資料放入一名為QEURY_STRING的環境變數中,QeueryString方法從這個變數中取出相應的值。 先建立兩個WebForm,分別為WebForm1和We