return返回值返回到哪里,Activity返回值[轉]

 2023-11-18 阅读 27 评论 0

摘要:使用startActivity方式啟動的Activity和它的父Activity無關,當它關閉時也不會提供任何反饋。?可變通的,你可以啟動一個Activity作為子Activity,它與父Activity有內在的聯系。當子Activity關閉時,它會觸發父Activity中的一個事件處理函數。子Activ
使用startActivity方式啟動的Activity和它的父Activity無關,當它關閉時也不會提供任何反饋。
?
可變通的,你可以啟動一個Activity作為子Activity,它與父Activity有內在的聯系。當子Activity關閉時,它會觸發父Activity中的一個事件處理函數。子Activity最適合用在一個Activity為其它的Activity提供數據(例如用戶從一個列表中選擇一個項目)的場合。
?
子Activity的創建和普通Activity的創建相同,也必須在應用程序的manifest中注冊。任何在manifest中注冊的Activity都可以用作子Activity。
?
啟動子Activity
?
startActivityForResult方法和startActivity方法工作很相似,但有一個很重要的差異。Intent都是用來決定啟動哪個Activity,你還可以傳入一個請求碼。這個值將在后面用來作為有返回值Activity的唯一ID。
?
下面的代碼顯示了如何啟動一個子Activity:
?
private?static?final?int?SHOW_SUBACTIVITY?=?1;
Intent?intent?=?new?Intent(this,?MyOtherActivity.class);
startActivityForResult(intent,?SHOW_SUBACTIVITY);
?
和正常的Activity一樣,子Activity可以隱式或顯式啟動。下面的框架代碼使用一個隱式的Intent來啟動一個新的子Activity來挑選一個聯系人:
?
private?static?final?int?PICK_CONTACT_SUBACTIVITY?=?2;
Uri?uri?=?Uri.parse(“content://contacts/people”);
Intent?intent?=?new?Intent(Intent.ACTION_PICK,?uri);
startActivityForResult(intent,?PICK_CONTACT_SUBACTIVITY);
?
返回值
?
當子Activity準備關閉時,在finish之前調用setResult來給調用的Activity返回一個結果。
?
setResult方法帶兩個參數:結果碼和表示為Intent的負載值。結果碼是運行子Activity的結果,一般是Activity.RESULT_OK或Activity.RESULT_CANCELED。在一些情況下,你會希望使用自己的響應代號來處理特定的應用程序的選擇;setResult支持任何整數值。
?
作為結果返回的Intent可以包含指向一個內容(例如聯系人,電話號碼或媒體文件)的URI和一組用來返回額外信息的Extra。
?
接下來的代碼片段節選自子Activity的onCreate方法,顯示了怎樣向調用的Activity返回不同的結果:
?
Button?okButton?=?(Button)?findViewById(R.id.ok_button);
?
okButton.setOnClickListener(new?View.OnClickListener()?{
public?void?onClick(View?view)
{
Uri?data?=?Uri.parse(“content://horses/”?+?selected_horse_id);
Intent?result?=?new?Intent(null,?data);
result.putExtra(IS_INPUT_CORRECT,?inputCorrect);
result.putExtra(SELECTED_PISTOL,?selectedPistol);
setResult(RESULT_OK,?result);
finish();
}
});
?
Button?cancelButton?=?(Button)?findViewById(R.id.cancel_button);
?
cancelButton.setOnClickListener(new?View.OnClickListener()?{
public?void?onClick(View?view)
{
setResult(RESULT_CANCELED,?null);
finish();
}
});
?
處理子Activity的結果
?
當子Activity關閉時,它的父Activity的onActivityResult事件處理函數被觸發。
?
重寫這個方法來處理從子Activity返回的結果。onActivityResult處理器接受好幾個參數:
?
??請求碼
曾經用來啟動子Activity的請求碼。
?
??結果碼
結果碼是由子Activity設置的,用來顯示它的結果。它可以是任何整數值,但典型的值是Activity.RESULT_OK和Activity.RESULT_CANCELLED。
?
如果子Activity非正常關閉或在關閉時沒有指定結果碼,結果碼都是Activity.RESULT_CANCELED。
?
??數據
一個Intent來打包任何返回的數據。依賴于子Activity的目的,它可能會包含一個代表特殊的從列表中選擇的數據的URI。可變通的,或額外的,子Activity可以使用“extras”機制以基礎值的方式返回臨時信息。
?
下面的框架代碼實現了一個Activity中的onActivityResult事件處理函數:
?
private?static?final?int?SHOW_SUB_ACTIVITY_ONE?=?1;
private?static?final?int?SHOW_SUB_ACTIVITY_TWO?=?2;
?
@Override
public?void?onActivityResult(int?requestCode,?int?resultCode,?Intent?data)?{
super.onActivityResult(requestCode,?resultCode,?data);
switch(requestCode)
{
case?(SHOW_SUB_ACTIVITY_ONE)?:
{
if?(resultCode?==?Activity.RESULT_OK)
{
Uri?horse?=?data.getData();
boolean?inputCorrect?=?data.getBooleanExtra(IS_INPUT_CORRECT,?false);
String?selectedPistol?=?data.getStringExtra(SELECTED_PISTOL);
}
break;
}
case?(SHOW_SUB_ACTIVITY_TWO)?:
{
if?(resultCode?==?Activity.RESULT_OK)
{
//?TODO:?Handle?OK?click.
}
break;
}
}
}

?

//原文地址:http://www.cnblogs.com/top5/archive/2012/04/09/2439598.html

轉載于:https://www.cnblogs.com/yiki/archive/2012/04/10/2440188.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/175762.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息