startActivityForResult的簡(jiǎn)單使用總結(jié)

文/程序員男神

前言

最近在整理需求的時(shí)候,發(fā)現(xiàn)頁面之間的數(shù)據(jù)傳輸這塊是個(gè)可以總結(jié)的知識(shí)點(diǎn)。一般情況下頁面之間的數(shù)據(jù)傳輸可以有以下幾種思路:1、通過startActivityForResult方法進(jìn)行數(shù)據(jù)傳輸;2、通過廣播的形式傳輸;3、可以通過接口的調(diào)用來傳輸數(shù)據(jù);4、通過存儲(chǔ)介質(zhì)來分享數(shù)據(jù);5、通過EventBus進(jìn)行頁面之間的傳輸;這邊總結(jié)一下第一種的簡(jiǎn)單使用。

2019全明星

一、使用場(chǎng)景

一個(gè)主界面(主Activity)通過意圖跳轉(zhuǎn)至多個(gè)不同子Activity上去,當(dāng)子模塊的代碼執(zhí)行完畢后再次返回主頁面,將子activity中得到的數(shù)據(jù)顯示在主界面/完成的數(shù)據(jù)交給主Activity處理。這種帶數(shù)據(jù)的意圖跳轉(zhuǎn)需要使用activity的onActivityResult()方法。

(1)startActivityForResult(Intent intent, int requestCode);

第一個(gè)參數(shù):一個(gè)Intent對(duì)象,用于攜帶將跳轉(zhuǎn)至下一個(gè)界面中使用的數(shù)據(jù),使用putExtra(A,B)方法,此處存儲(chǔ)的數(shù)據(jù)類型特別多,基本類型全部支持。

第二個(gè)參數(shù):如果> = 0,當(dāng)Activity結(jié)束時(shí)requestCode將歸還在onActivityResult()中。以便確定返回的數(shù)據(jù)是從哪個(gè)Activity中返回,用來標(biāo)識(shí)目標(biāo)activity。

與下面的resultCode功能一致,感覺Android就是為了保證數(shù)據(jù)的嚴(yán)格一致性特地設(shè)置了兩把鎖,來保證數(shù)據(jù)的發(fā)送,目的地的嚴(yán)格一致性。

(2)onActivityResult(int requestCode, int resultCode, Intent data)

第一個(gè)參數(shù):這個(gè)整數(shù)requestCode用于與startActivityForResult中的requestCode中值進(jìn)行比較判斷,是以便確認(rèn)返回的數(shù)據(jù)是從哪個(gè)Activity返回的。

第二個(gè)參數(shù):這整數(shù)resultCode是由子Activity通過其setResult()方法返回。適用于多個(gè)activity都返回?cái)?shù)據(jù)時(shí),來標(biāo)識(shí)到底是哪一個(gè)activity返回的值。

第三個(gè)參數(shù):一個(gè)Intent對(duì)象,帶有返回的數(shù)據(jù)??梢酝ㄟ^data.getXxxExtra( );方法來獲取指定數(shù)據(jù)類型的數(shù)據(jù),

(3)setResult(int resultCode, Intent data)

在意圖跳轉(zhuǎn)的目的地界面調(diào)用這個(gè)方法把Activity想要返回的數(shù)據(jù)返回到主Activity,

第一個(gè)參數(shù):當(dāng)Activity結(jié)束時(shí)resultCode將歸還在onActivityResult()中,一般為RESULT_CANCELED該值默認(rèn)為0 , RESULT_OK該值默認(rèn)為-1。

第二個(gè)參數(shù):一個(gè)Intent對(duì)象,返回給主Activity的數(shù)據(jù)。在intent對(duì)象攜帶了要返回的數(shù)據(jù),使用putExtra( )方法。

二、使用步驟

1、startActivityForResult跳轉(zhuǎn)到目標(biāo)activity。
FirstActivity 頁面一個(gè)Button,一個(gè)Text View。點(diǎn)擊Button跳轉(zhuǎn)至SecondActivity,關(guān)閉SecondActivity,把SecondActivity的數(shù)據(jù)傳到FirstActivity,顯示在TextView上面。

/**
 * 描述: 第一個(gè)activity
 * 作者|時(shí)間: djj on 2019/1/14 10:11
 * 博客地址: http://www.itdecent.cn/u/dfbde65a03fc
 */
public class FirstActivity extends AppCompatActivity {

    private Button mBtnStart;
    private TextView mTvShow;
    private final static int REQUEST_CODE = 1; // 返回的結(jié)果碼

    /**
     * 為了得到傳回的數(shù)據(jù),必須在前面的Activity中(指FirstActivity類)重寫onActivityResult方法
     *
     * @param requestCode 請(qǐng)求碼,即調(diào)用startActivityForResult()傳遞過去的值
     * @param resultCode  返回碼,結(jié)果碼用于標(biāo)識(shí)返回?cái)?shù)據(jù)來自哪個(gè)新Activity
     * @param data        更新后的數(shù)據(jù)
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_CODE) {
                mTvShow.setText(data.getExtras().getString("second") + "requestCode:" + requestCode + "resultCode:" + resultCode);
            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        mBtnStart = findViewById(R.id.btn_start);
        mTvShow = findViewById(R.id.tv_shows);

        mBtnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //得到新打開Activity關(guān)閉后返回的數(shù)據(jù)
                //第二個(gè)參數(shù)為請(qǐng)求碼,可以根據(jù)業(yè)務(wù)需求自己編號(hào)
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });
    }
}

activity_first.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_start"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="打開Second" />

    <TextView
        android:id="@+id/tv_shows"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp" />
</LinearLayout>

第二個(gè)activity的代碼:

/**
 * 描述: 第二個(gè)activity
 * 作者|時(shí)間: djj on 2019/1/14 10:16
 * 博客地址: http://www.itdecent.cn/u/dfbde65a03fc
 */
public class SecondActivity extends AppCompatActivity {

    private Button mBtnColse;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        mBtnColse = findViewById(R.id.btn_close);

        mBtnColse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                //把需要返回的數(shù)據(jù)存放在intent
                intent.putExtra("second", "我是第二頁的信息!");
                //設(shè)置返回?cái)?shù)據(jù)
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }
}

activity_second.xml的文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_close"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="關(guān)閉Sencond" />

</LinearLayout>

通過data.getExtras().getString("second")我們可以獲取Text View的值,也可以看到requestCode、resultCode的數(shù)值。

總結(jié)
文章雖然簡(jiǎn)單,自己寫一遍還是有點(diǎn)收獲,通過自己的總結(jié),基礎(chǔ)也可以打的更加牢固把!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容