溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

activity返回值

發(fā)布時(shí)間:2020-07-04 01:45:07 來源:網(wǎng)絡(luò) 閱讀:348 作者:yym631 欄目:開發(fā)技術(shù)

Activity返回值


使用startActivity方式啟動(dòng)的Activity和它的父Activity無關(guān),當(dāng)它關(guān)閉時(shí)也不會(huì)提供任何反饋。

 

可變通的,你可以啟動(dòng)一個(gè)Activity作為子Activity,它與父Activity有內(nèi)在的聯(lián)系。當(dāng)子Activity關(guān)閉時(shí),它會(huì)觸發(fā)父Activity中的一個(gè)事件處理函數(shù)。子Activity最適合用在一個(gè)Activity為其它的Activity提供數(shù)據(jù)(例如用戶從一個(gè)列表中選擇一個(gè)項(xiàng)目)的場(chǎng)合。

 

子Activity的創(chuàng)建和普通Activity的創(chuàng)建相同,也必須在應(yīng)用程序的manifest中注冊(cè)。任何在manifest中注冊(cè)的Activity都可以用作子Activity。

 

啟動(dòng)子Activity

 

startActivityForResult方法和startActivity方法工作很相似,但有一個(gè)很重要的差異。Intent都是用來決定啟動(dòng)哪個(gè)Activity,你還可以傳入一個(gè)請(qǐng)求碼。這個(gè)值將在后面用來作為有返回值A(chǔ)ctivity的唯一ID。

 

下面的代碼顯示了如何啟動(dòng)一個(gè)子Activity:

 

    private static final int SHOW_SUBACTIVITY = 1;

    Intent intent = new Intent(this, MyOtherActivity.class);

    startActivityForResult(intent, SHOW_SUBACTIVITY);

 

和正常的Activity一樣,子Activity可以隱式或顯式啟動(dòng)。下面的框架代碼使用一個(gè)隱式的Intent來啟動(dòng)一個(gè)新的子Activity來挑選一個(gè)聯(lián)系人:

 

    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);

 

返回值

 

當(dāng)子Activity準(zhǔn)備關(guān)閉時(shí),在finish之前調(diào)用setResult來給調(diào)用的Activity返回一個(gè)結(jié)果。

 

setResult方法帶兩個(gè)參數(shù):結(jié)果碼和表示為Intent的負(fù)載值。結(jié)果碼是運(yùn)行子Activity的結(jié)果,一般是Activity.RESULT_OK或Activity.RESULT_CANCELED。在一些情況下,你會(huì)希望使用自己的響應(yīng)代號(hào)來處理特定的應(yīng)用程序的選擇;setResult支持任何整數(shù)值。

 

作為結(jié)果返回的Intent可以包含指向一個(gè)內(nèi)容(例如聯(lián)系人,電話號(hào)碼或媒體文件)的URI和一組用來返回額外信息的Extra。

 

接下來的代碼片段節(jié)選自子Activity的onCreate方法,顯示了怎樣向調(diào)用的Activity返回不同的結(jié)果:

 

    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的結(jié)果

 

當(dāng)子Activity關(guān)閉時(shí),它的父Activity的onActivityResult事件處理函數(shù)被觸發(fā)。

 

重寫這個(gè)方法來處理從子Activity返回的結(jié)果。onActivityResult處理器接受好幾個(gè)參數(shù):

 

? 請(qǐng)求碼

曾經(jīng)用來啟動(dòng)子Activity的請(qǐng)求碼。

 

? 結(jié)果碼

結(jié)果碼是由子Activity設(shè)置的,用來顯示它的結(jié)果。它可以是任何整數(shù)值,但典型的值是Activity.RESULT_OK和Activity.RESULT_CANCELLED。

 

如果子Activity非正常關(guān)閉或在關(guān)閉時(shí)沒有指定結(jié)果碼,結(jié)果碼都是Activity.RESULT_CANCELED。

 

? 數(shù)據(jù)

一個(gè)Intent來打包任何返回的數(shù)據(jù)。依賴于子Activity的目的,它可能會(huì)包含一個(gè)代表特殊的從列表中選擇的數(shù)據(jù)的URI??勺兺ǖ?,或額外的,子Activity可以使用“extras”機(jī)制以基礎(chǔ)值的方式返回臨時(shí)信息。

 

下面的框架代碼實(shí)現(xiàn)了一個(gè)Activity中的onActivityResult事件處理函數(shù):

 

    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;

            }

        }

    }


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI