欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android startActivityForResult和setResult的區(qū)別

 更新時間:2017年08月29日 11:53:38   投稿:lqh  
這篇文章主要介紹了 Android startActivityForResult和setResult的區(qū)別的相關資料,希望通過本文能幫助大家理解這部分內(nèi)容,需要的朋友可以參考下

 Android startActivityForResult和setResult的區(qū)別

startActivityForResult與startActivity的不同之處在于:

1、startActivity( )

僅僅是跳轉到目標頁面,若是想跳回當前頁面,則必須再使用一次startActivity( )。

2、startActivityForResult( )

可以一次性完成這項任務,當程序執(zhí)行到這段代碼的時候,假若從T1Activity跳轉到下一個Text2Activity,而當這個Text2Activity調(diào)用了finish()方法以后,程序會自動跳轉回T1Activity,并調(diào)用前一個T1Activity中的onActivityResult( )方法。

相關函數(shù):

startActivityForResult(Intent intent, Int requestCode)
setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)

 簡單例子介紹:

1.跳轉的時候不是采用startActivity(intent) 這個方法,而是startActivityForResult(intent, 0)

Intent intent=new Intent();
intent.setClass(A.this, B.class);
Bundle bundle=new Bundle();
String str1="aaaaaa";
bundle.putString("str1", str1);
intent.putExtras(bundle);
startActivityForResult(intent, 0);//這里采用startActivityForResult來做跳轉,此處的0為一個依據(jù),可以寫其他的值,但一定要>=0

2.重寫onActivityResult方法,用來接收B回傳的數(shù)據(jù)。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) { //resultCode為回傳的標記,我在B中回傳的是RESULT_OK
  case RESULT_OK:
  Bundle b=data.getExtras(); //data為B中回傳的Intent
  String str=b.getString("str1");//str即為回傳的值
  break;
default:
  break;
  }
}

3.在B中回傳數(shù)據(jù)時采用setResult方法,并且之后要調(diào)用finish方法。

setResult(RESULT_OK, intent); //intent為A傳來的帶有Bundle的intent,當然也可以自己定義新的Bundle
finish();//此處一定要調(diào)用finish()方法

Android activity的setResult()在什么時候調(diào)用(重點也是難點)

如果在startActivityForResult起來的Activity里面設置setResult,結果并不會馬上返回給parent的Activity,只有當前Activity被finish,結果才會被發(fā)送給parent的onActivityResult去處理!

如果一個activity要返回數(shù)據(jù)到啟動它的那個activity,可以調(diào)用setResult()方法。那什么時候去調(diào)用setResult()方法返回數(shù)據(jù)呢?
看一下源碼就明白了:

public final void setResult(int resultCode, Intent data) {
    synchronized (this) {
      mResultCode = resultCode;
      mResultData = data;
    }
  }

  public void finish() {
    if (mParent == null) {
      int resultCode;
      Intent resultData;
      synchronized (this) {
        resultCode = mResultCode;
        resultData = mResultData;
      }
      if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
      try {
        if (ActivityManagerNative.getDefault()
          .finishActivity(mToken, resultCode, resultData)) {
          mFinished = true;
        }
      } catch (RemoteException e) {
        // Empty
      }
    } else {
      mParent.finishFromChild(this);
    }
  }

這段代碼可以看出activity返回result是在被finish的時候,也就是說調(diào)用setResult()方法必須在finish()之前。

那么如果在如下方法中調(diào)用setResult()也有可能不會返回成功: onPause(), onStop(), onDestroy(),

因為這些方法調(diào)用不一定是在finish之前的,當然在onCreate()就調(diào)用setResult肯定是在finish之前的

按BACK鍵從一個Activity退出來的,一按BACK,android就會自動調(diào)用Activity的finish()方法,然后設置resultCode為RESULT_CANCELED,也就不會返回任何數(shù)據(jù)了 .

解決方法就是在Activity里面捕獲按BACK的事件,捕獲到之后先setResult,然后自己來調(diào)用finish,就搞定了……把BACK事件直接自己給吞了

@Override
  public void onBackPressed() {
    Log.i(TAG, "onBackPressed");
    setResult(Const.LIVE_OK);
    super.onBackPressed();
  }

當然還可以在onCreate()就調(diào)用setResult,不過我覺得這種方法沒有重寫onBackPressed()方法好.

 以上就是Android startActivityForResult和setResult的區(qū)別,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Android學習筆記(二)之電話撥號器

    Android學習筆記(二)之電話撥號器

    目前手機市場上android已經(jīng)具有強大的霸主地位,吸引了很多的追棒者,android學習越來越火熱,本文給大家介紹android學習筆記(二)之電話撥號器,感興趣的朋友一起學習吧
    2015-11-11
  • Android開發(fā)之開發(fā)者頭條(二)實現(xiàn)左滑菜單

    Android開發(fā)之開發(fā)者頭條(二)實現(xiàn)左滑菜單

    本文給大家介紹Android開發(fā)之開發(fā)者頭條(二)實現(xiàn)左滑菜單,主要用android自帶的DrawerLayout控件實現(xiàn)的此功能,具體實現(xiàn)過程請參考下本文
    2016-04-04
  • Flutter底部導航欄的實現(xiàn)方式

    Flutter底部導航欄的實現(xiàn)方式

    這篇文章主要為大家詳細介紹了Flutter底部導航欄的實現(xiàn)方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Android編程中HTTP服務用法詳解

    Android編程中HTTP服務用法詳解

    這篇文章主要介紹了Android編程中HTTP服務用法,結合實例形式較為詳細的分析了Android中http服務的具體步驟與相關使用技巧,需要的朋友可以參考下
    2016-01-01
  • Android中ListView的幾種常見的優(yōu)化方法總結

    Android中ListView的幾種常見的優(yōu)化方法總結

    Android中的ListView應該算是布局中幾種最常用的組件之一,本篇文章主要做了三種優(yōu)化總結,有興趣的可以了解一下。
    2017-02-02
  • 基于fluttertoast實現(xiàn)封裝彈框提示工具類

    基于fluttertoast實現(xiàn)封裝彈框提示工具類

    這篇文章主要為大家介紹了基于fluttertoast實現(xiàn)封裝彈框提示工具類的實現(xiàn)代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Android QQ登錄界面繪制代碼

    Android QQ登錄界面繪制代碼

    這篇文章主要為大家詳細介紹了Android QQ登錄界面繪制代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android實現(xiàn)炫酷的網(wǎng)絡直播彈幕功能

    Android實現(xiàn)炫酷的網(wǎng)絡直播彈幕功能

    這篇文章主要為大家詳細介紹了Android仿網(wǎng)絡直播彈幕功能的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android如何實現(xiàn)設備的異顯功能詳解

    Android如何實現(xiàn)設備的異顯功能詳解

    這篇文章主要給大家介紹了關于Android如何實現(xiàn)設備的異顯功能的相關資料,這篇文章通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • Android手機內(nèi)存中文件的讀寫方法小結

    Android手機內(nèi)存中文件的讀寫方法小結

    這篇文章主要介紹了Android手機內(nèi)存中文件的讀寫方法,實例總結了Android針對文件讀寫操作的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04

最新評論