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方法。