Android開發教程之Activity傳值問題分析

Android開發教程之Activity傳值問題分析。app開發經常會使用到一些界面的跳轉和傳值,可以使用intent實現界面的跳轉和傳值。

最常見的Intent跳轉示例:

Intentintent=newIntent(A.this,B.class);

startActivity(intent);

或:

Intentintent=newIntent();

intent.setClass(A.this,B.class);

startActivity(intent);

最常見的Intent傳值示例:

Intentintent=newIntent(A.this,B.class);

intent.putExtra("Name","feng88724");

startActivity(intent);

Intent傳多個值示例:

Intentintent=newIntent(A.this,B.class);

intent.putExtra("Name","feng88724");

intent.putExtra("Pass","12345678");

startActivity(intent);

或:

Intentintent=newIntent(A.this,B.class);

/*通過Bundle對象存儲需要傳遞的數據*/

Bundlebundle=newBundle();

/*字符、字符串、佈爾、字節數組、浮點數等等,都可以傳*/

bundle.putString("Name","feng88724");

bundle.putExtra("Pass","12345678");

/*把bundle對象assign給Intent*/

intent.putExtras(bundle);

startActivity(intent);

接收值示例:

/*獲取Intent中的Bundle對象*/

Bundlebundle=this.getIntent().getExtras();

/*獲取Bundle中的數據,註意類型和key*/

Stringname=bundle.getString("Name");

Stringpass=bundle.getBoolean("Pass");

或:

String name =this.getIntent().getStringExtra("Name");

String pass =this.getIntent().getStringExtra("Pass");

如果在頁面跳轉之後,需要返回到之前的頁面,同時要保留用戶之前輸入的信息,單獨使用intent跳轉實現不瞭。intent跳轉到新的頁面後,前一個activity會被Destoryer,在將值傳回來他將是一個新的頁面。這裡我們可以使用onActivityResult()方法將跳轉之前的activity頁面從新喚醒。

從A頁面跳轉到B頁面時,不可以使用"startActivity()"方法,而要使用"startActivityForResult"方法。

在A頁面的Activity中,需要重寫"onActivityResult"方法

A頁面:

@Override

protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){

super.onActivtiyResult(requestCode,resultCode,data);

if(requestCode==RESULT_OK){

if(null!=data){

//這裡接受回傳的值

}

}

}

B頁面:

Intent intent = new Intent(B.this,A.class);

/*給上一個Activity返回結果*/

B.this.setResult(RESULT_OK,intent);

/*結束本Activity*/

B.this.finish();

利用onNewIntent避免Activity之間的跳轉傳值多次實體化

轉載:https://www.cnblogs.com/fuyouG/p/fuyou-G-entryName.html

onNewIntent

需要註意的是:

1、通過Intent啟到一個Activity的時候,就算已經存在一個相同的正在運行的Activity,系統也會創建一個新的Activity實例。為瞭不讓Activity實例化多次,我們需要通過在AndroidManifest.xml配置啟動方式。

2、launchMode為singleTask的時候,通過Intent跳到一個Activity,如果系統已經存在一個實例,系統就會將請求發送到這個實例上,但這個時候———-系統就不會再調用onCreate方法,而是調用onNewIntent方法。

能用到的地方是A–>B–>C–>A,此時onActivityResult就有些復雜瞭。例如:

1、點擊 設置密碼(A),跳到 設置密碼頁面(B),輸入密碼;

2、點擊完成 跳到 確定密碼頁面(C),輸入密碼,設置成功後返回到設置頁面(A)並帶回一個狀態,此時(A)中的“設置密碼”變成“修改密碼”;

3、用戶設置過密碼後,此頁面就變成瞭“修改密碼”的選項

4、C跳到A,這個A我們要用以前棧中已有的,不能再去新建一個A的實例,所以需要在AndroidManifest.xml配置activity的啟動方式以實現單任務模式。每步的跳轉中,我們不能finish掉上一步Activity,否則按返回鍵時,用戶體驗不好。。。。這時就需要onNewIntent瞭。當然這隻是我的一個思路。

首先在AndroidManifest.xml配置activity的啟動方式以實現單任務模式

先看第二個SecondActivity,它需要把值傳到FirstActivity。

再來看FirstActivity

此時沒有走onCreat方法,但是為瞭以防萬一,最好在onCreat方法裡也寫上操作,因為後臺運行的Activity可能在內存過高時被系統殺掉,這時就會走onCreat方法。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *