在Activity之間傳值,大概有三種方法比較常用,
第一種:
由Activity1 傳給 Activity2,在Activity1中,
Intent intent = new Intent();
intent.setClass(MainActivity.this, OneActivity.class);
intent.putExtra("param1", "01測試一下下!");
startActivity(intent);
在Activity2中,
</pre><pre name="code" class="java"> Intent intent = getIntent();
infoStr = intent.getStringExtra("param1");
不過在這裏得到的infoStr不是引用,而是new了一個對象並賦值了,而且這種方法,回傳參數也十分不便。
第二種:
採用startActivityForResult,它可以將結果返回,其過程如下
由Activity1 傳給 Activity2,在Activity1中,
Intent intent = new Intent();
intent.setClass(MainActivity.this, TwoActivity.class);
intent.putExtra("param2", "02測試一下下!");
startActivityForResult(intent, 1);
在Activity1中還需要加入onActivityResult方法,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == 1 || data.getStringExtra("param2")!=null){
Bundle bun=data.getExtras();
str2 = bun.getString("param2");
tvInfo2.setText(str2);
}
}
在Activity2中,
Intent intent = getIntent();
infoStr = intent.getStringExtra("param2");
攔截Activity2的返回按鈕事件,在finish前,設置setResult,
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
Intent intent = new Intent();
intent.setClass(TwoActivity.this, MainActivity.class);
intent.putExtra("param2", etInfo2.getText().toString());
this.setResult(1, intent);
this.finish();
}
return super.onKeyDown(keyCode, event);
}
第二種方法適用於,Activity1中需要啓動Activity2來執行一些數據,並返回結果給Activity1這種情況。
第三種:
在多個Activity間傳值,用之前說的方法,就顯得太麻煩了,這時,我們可以用Application context,Application 的生命週期從程序開始到結束都存在,所以使用起來比較方便。
新建一個類,繼承自Application,
package com.harold.base;
import java.io.InputStream;
import android.app.Application;
public class AppContext extends Application{
private InputStream htmlIs;
public InputStream getHtmlIs() {
return htmlIs;
}
public void setHtmlIs(InputStream htmlIs) {
this.htmlIs = htmlIs;
}
}
然後在AndroidManifest.xml的application標籤需要添加name屬性,
android:name="com.harold.base.AppContext"
在使用時,需要先獲取context,設置值,
AppContext appCon = (AppContext) getApplicationContext();
appCon.setHtmlIs(getAssets().open("hello.html"));
在其他使用該值Activity中,
AppContext appCon = (AppContext) getApplicationContext();
appCon.getHtmlIs();
第三種方法使用Application context達到java中的全局變量的效果,十分方便
下面是源碼: