於是就可以用到onActivityResult() 這個方法了,下面呢,我就具體來介紹壹下用法。
不過在這之前,先講壹下intent的用法:
對於intent主要的分類主要包括隱式意圖和顯式意圖。顯式意圖通常主要是啟動本應用中的Activity之間的數據,
而隱式意圖則常見於啟動系統中的某些特定的動作,比如打電話,或者是跨應用的Activity啟動。
壹般來說:
顯式意圖:調用Intent.setComponent()或Intent.setClass()方法明確指定了組件名的Intent為顯式意圖,顯式意圖明確指定了Intent應該傳遞給哪個組件。
隱式意圖:沒有明確指定組件名的Intent為隱式意圖。 Android系統會根據隱式意圖中設置的動作(action)、類別(category)、
數據(URI和數據類型)找到最合適的組件來處理這個意圖。
1、MainActivity裏面的主要代碼
(1)當需要返回值時,那麽在啟動另壹個Activity時要用到startActivityForResult(intent, REQUEST_CODE);
註意第二個參數是請求的int類型的值,這個值要在onActivityResult()方法中和requestCode做判斷的,
由此來判斷是啟動的某個Activity。
(2)onActivityResult()方法中的第二個參數就是SecondActivity傳回來的鍵,
第三個參數就是SecondActivity傳回來的鍵對應的值。
final int RESULT_CODE=101;
final int REQUEST_CODE=1;
public void enterSecond(View view) {
Intent intent=new Intent(this,SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i(TAG, "onActivityResult"+"requestCode"+requestCode+"\n resultCode="+resultCode);
if(requestCode==REQUEST_CODE) {
if(resultCode==RESULT_CODE) {
String result=data.getStringExtra("second");
textView.setText(result);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
2、SecondActivity 類中的代碼:
這個裏面的RESULT_CODE、intent分別跟上段代碼中onActivityResult()方法中的第二個、第三個參數相對應。
final int RESULT_CODE=101;
public void closeButton(View view) {
Intent intent=new Intent();
intent.putExtra("second", "I am second!");
setResult(RESULT_CODE, intent);
finish();
}
3、除此之外,onActivityResult()方法中的第二個參數resultCode還有系統自帶的壹些參數,也就是說,如果我們啟動的intent是隱式意圖,那麽可以用Activity類中RESULT_OK來表示操作已經順利結束。
例如,調用系統圖庫的返回,請看代碼:
final int CROP_PIC_REQUESTCODE = 23;
final int SELECT_PICTURE = 21;
if (resultCode == RESULT_OK && requestCode == SELECT_PICTURE) {
System.out.println("調用圖庫返回,關閉activity");
Intent intent1 = new Intent("com.android.camera.action.CROP");
intent1.setDataAndType(data.getData(), "image/*");
intent1.putExtra("crop", "true");
intent1.putExtra("aspectX", 1);
intent1.putExtra("aspectY", 1);
intent1.putExtra("outputX", 80);
intent1.putExtra("outputY", 80);
intent1.putExtra("return-data", true);
startActivityForResult(intent1, CROP_PIC_REQUESTCODE);
}
當然,我們還可以看下源碼中還有哪些類似RESULT_OK的。
/** Standard activity result: operation canceled. */
public static final int RESULT_CANCELED = 0;
/** Standard activity result: operation succeeded. */
public static final int RESULT_OK = -1;
/** Start of user-defined activity results. */
public static final int RESULT_FIRST_USER = 1;
總結:本來我只是想使用壹下顯示intent啟動Activity的方式,後來我又自己擴展了隱式intent啟動Activity。
總之,碰到問題,要多思考,不要拘泥在壹個點上,這樣自己才會真正的進步。
如果大家有什麽更好的建議和看法,壹定要提出來,互相切磋,***同進步是我們技術宅最大的願望啊,很高興和大家分享!