最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Activity進(jìn)行數(shù)據(jù)傳輸?shù)姆椒?/h1>
 更新時(shí)間:2025年08月23日 09:15:39   作者:三三是該溜子  
文章講解了Android中Activity間的數(shù)據(jù)傳輸與回傳方法,包括使用Intent的putExtra傳遞數(shù)據(jù)、startActivityForResult獲取返回結(jié)果(已過(guò)時(shí)),以及新方式registerForActivityResult替代傳統(tǒng)機(jī)制,實(shí)現(xiàn)數(shù)據(jù)交互與結(jié)果回調(diào),感興趣的朋友跟隨小編一起看看吧

Android 應(yīng)用開(kāi)發(fā)中,Activity之間的數(shù)據(jù)傳遞是常見(jiàn)的需求。核心方法包括使用Intent、Bundle、使用全局變量存儲(chǔ)、SharedPreferences以及通過(guò)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)傳遞。其中,使用Intent和Bundle進(jìn)行數(shù)據(jù)傳遞是最常見(jiàn)且高效的方法。Intent不僅可以啟動(dòng)不同的Activity,還能夠攜帶各種數(shù)據(jù)。通過(guò)putExtra()方法添加數(shù)據(jù),在新的Activity中通過(guò)getIntent()方法接收數(shù)據(jù),實(shí)現(xiàn)不同Activity間的數(shù)據(jù)傳遞。

一:Activity之間的數(shù)據(jù)傳輸

問(wèn)題:不同的Activity之間怎么進(jìn)行數(shù)據(jù)傳輸呢?

比如第一個(gè)頁(yè)面中有一些字符串?dāng)?shù)據(jù)之類的要通過(guò)數(shù)據(jù)傳輸,傳遞給第二個(gè)頁(yè)面進(jìn)行顯示的

1:MainActivity做處理

在定義一個(gè)按鈕,和一個(gè)文本輸入框

<Button
        android:id="@+id/btn_second3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="攜帶數(shù)據(jù),跳轉(zhuǎn)到Second頁(yè)面"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/btn_second2"/>
    <EditText
        android:id="@+id/et_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請(qǐng)輸入一些數(shù)據(jù)"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/btn_second3"/>
        findViewById(R.id.btn_second3).setOnClickListener(this);
        etData = findViewById(R.id.et_data);

繼續(xù)在onClick方法中寫一個(gè)else if()

else if (id == R.id.btn_second3) {
            Intent intent = new Intent(this, SecondActivity.class);
            String string = etData.getText().toString();
            if(string != null && string.length() > 0){
                intent.putExtra("key_data",string);               
            }
            startActivity(intent);
        }

(1)putExtra

Extra翻譯為額外;它的作用是在通過(guò) Intent 啟動(dòng)另一個(gè)組件(如 Activity)時(shí),攜帶一些額外的數(shù)據(jù)

有點(diǎn)Cookie和Session會(huì)話的味道了,記住這里的key值一定要匹配

(2)邏輯梳理

從輸入框中獲取string字符串

2:SecondActivity做處理

xml布局自己定義一個(gè)TextView,此處略

Intent intent = getIntent();
        String keyData = intent.getStringExtra("key_data");
        TextView textView = findViewById(R.id.text_view);
        if(keyData != null && keyData.length() > 0){
            textView.setText(keyData);
        }

這邊呢接收數(shù)據(jù),并讓string顯示在頁(yè)面上

看一下兩者聯(lián)系

3:效果

效果就這樣,第二個(gè)頁(yè)面(右圖)接受到了,就顯示出來(lái)

二:Activity之間的數(shù)據(jù)回傳

問(wèn)題:MainActivity怎么接收SecondActivity回傳的數(shù)據(jù)

1:MainActivity做處理

(1)startActivityForResult

<Button
        android:id="@+id/btn_second4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳轉(zhuǎn)到Second頁(yè)面,等待Second返回?cái)?shù)據(jù)"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/et_data"/>
findViewById(R.id.btn_second4).setOnClickListener(this);
else if (id == R.id.btn_second4) {
            //老方式
            startActivityForResult(new Intent(this, SecondActivity.class),9);
        }
  • startActivityForResult方法在安卓API30以后已經(jīng)過(guò)時(shí)了,但是很多商業(yè)中也會(huì)用到這個(gè)玩意,也得學(xué)bro
    • 參數(shù)一:Intent 對(duì)象,“要啟動(dòng)哪個(gè)頁(yè)面”,也可以在 Intent 里用 putExtra 攜帶數(shù)據(jù)傳給目標(biāo)頁(yè)面。
    • 參數(shù)二:requestCode(請(qǐng)求碼),給這次跳轉(zhuǎn)打個(gè) “標(biāo)記 9”,等目標(biāo)頁(yè)面返回?cái)?shù)據(jù)時(shí),能通過(guò)這個(gè)標(biāo)記識(shí)別 “這是 btn_start_second4 按鈕跳轉(zhuǎn)的返回”。

(2)onActivityResult

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 9 && resultCode == 8){
            int keyComeBackNum = data.getIntExtra("key_comeBackNum", 0);
            String keyComeBackString = data.getStringExtra("key_comeBackString");
            Log.i(TAG, "onActivityResult: num = " + keyComeBackNum);
            Log.i(TAG, "onActivityResult: string = " + keyComeBackString);
            etData.setText(keyComeBackNum + keyComeBackString);
        }
    }
  • requestCode:“請(qǐng)求碼”,自己定義的一個(gè)整數(shù)標(biāo)記,這里是9; 區(qū)分 “是哪一次啟動(dòng) Activity 的請(qǐng)求”
    • 比如:一個(gè)頁(yè)面有多個(gè)按鈕,都用 startActivityForResult 跳轉(zhuǎn)到不同頁(yè)面,靠 requestCode 就知道 “這次返回的數(shù)據(jù),對(duì)應(yīng)之前哪個(gè)按鈕的跳轉(zhuǎn)” 。
  • resultCode:“結(jié)果碼”,是目標(biāo) Activity 返回的狀態(tài)標(biāo)記
  • data:一個(gè) Intent 對(duì)象,是目標(biāo) Activity 返回的 “數(shù)據(jù)載體”; 記得判空
    • getInExtra取到的值如果為空,默認(rèn)為0

2:SecondActivity做處理

在SecondActivity的xml中在定義一個(gè)Button控件

<Button
        android:id="@+id/btn_back"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="往MainActivity回傳數(shù)據(jù)"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>

(1)setResult

findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int comeBack = 798;
                String string = "surprise ma da faker";
                Intent backIntent = new Intent();
                backIntent.putExtra("key_comeBackNum",comeBack);
                backIntent.putExtra("key_comeBackString",string);
                setResult(8,backIntent);
                finish();
            }
        });
  • setResult(8,backIntent),這里我們的結(jié)果碼就是8

3:邏輯梳理

  • 啟動(dòng)時(shí)
    • 通過(guò) startActivityForResult(intent, 9) 啟動(dòng) SecondActivity,這里的 9 就是 requestCode(請(qǐng)求碼)。
  • 目標(biāo)頁(yè)面返回時(shí)
    • SecondActivity 中,需要通過(guò) setResult(8, data) 來(lái)設(shè)置返回結(jié)果:
    • 第一個(gè)參數(shù) 8 就是 resultCode(結(jié)果碼,自定義的標(biāo)記)
    • 第二個(gè)參數(shù) dataIntent 對(duì)象,通過(guò) putExtra 存入數(shù)據(jù)(key_comeBackNumkey_comeBackString
  • 接收返回時(shí):回到當(dāng)前頁(yè)面的 onActivityResult 方法:
    • 通過(guò) requestCode == 9 判斷:“這是之前用請(qǐng)求碼 9 啟動(dòng)的頁(yè)面返回的結(jié)果”
    • 通過(guò) resultCode == 8 判斷:“目標(biāo)頁(yè)面返回了結(jié)果碼 8 的狀態(tài)”
    • data 中取出攜帶的 key_comeBackNumkey_comeBackString,并更新到 etData 輸入框中

4:finish問(wèn)題延伸

提問(wèn):在第二個(gè)頁(yè)面做了一些數(shù)據(jù)后,不馬上finish,而是手動(dòng)關(guān)閉,這個(gè)時(shí)候回傳的數(shù)據(jù)還能收到嗎

最后一句代碼finish刪掉;finish的作用就是,點(diǎn)擊btn_bakc2這個(gè)按鈕后activity_second這個(gè)頁(yè)面就退出了

這里我們點(diǎn)擊返回按鈕,同樣MainActivity能接收到傳回來(lái)的數(shù)據(jù),并不受影響

三:Activity數(shù)據(jù)回傳的新方式

1:.launch

用于啟動(dòng)目標(biāo) Activity 并等待其返回結(jié)果的核心方法。它的作用類似于傳統(tǒng)的 startActivityForResult()

創(chuàng)建點(diǎn)擊事情的準(zhǔn)備工作

//跳轉(zhuǎn)到第二個(gè)頁(yè)面,等待回傳數(shù)據(jù)
		else if (id == R.id.btn_second5) {
            activityResultLancher.launch(new Intent(this, SecondActivity.class));
        }

2:registerForActivityResult

可以理解一個(gè)接收Activity結(jié)果的注冊(cè)器,負(fù)責(zé) “結(jié)果回調(diào)”,能在當(dāng)前 Activity中優(yōu)雅接收、處理返回的數(shù)據(jù)。

是傳統(tǒng)的startActivityForResult + onActivityResult 機(jī)制的平替

private ActivityResultLauncher<Intent> activityResultLancher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult o) {
                    int resultCode = o.getResultCode();//返回的結(jié)果碼
                    Intent data = o.getData();//返回的數(shù)據(jù)
                    if (resultCode == 8) {
                        int keyComeBackNum = data.getIntExtra("key_comeBackNum", 0);
                        String keyComeBackString = data.getStringExtra("key_comeBackString");
                        Log.i(TAG, "onActivityResult: key_comeBackNum = " + keyComeBackNum);
                        Log.i(TAG, "onActivityResult: key_comeBackString" + keyComeBackString);
                        etData.setText("接受到的數(shù)據(jù)是" + keyComeBackString + keyComeBackNum);
                    }
                }
            }
    );

(1)new ActivityResultContracts.StartActivityForResult()

作用:?jiǎn)?dòng)一個(gè) Activity 并獲取其返回結(jié)果

ActivityResultContracts 是一個(gè)包含多種預(yù)定義合約(Contract)的工具類,StartActivityForResult 是其中一個(gè)靜態(tài)內(nèi)部類

(2)new ActivityResultCallback()

作用:回調(diào)接口,當(dāng)被啟動(dòng)的 Activity 關(guān)閉并返回結(jié)果時(shí)觸發(fā)

重寫onActivityResult方法,((20250808114147-zw40xjr “前面我們已經(jīng)使用過(guò)這個(gè)方法,但是兩者形參不同,”))ActivityResult中包括結(jié)果碼(resultCode)返回的數(shù)據(jù)(data)

(3)o.getResultCode()

(4)o.getdata()

3:結(jié)果

到此這篇關(guān)于Android Activity 如何進(jìn)行數(shù)據(jù)傳輸?shù)奈恼戮徒榻B到這了,更多相關(guān)Android Activity 數(shù)據(jù)傳輸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Android應(yīng)用開(kāi)發(fā)中Scroller類的屏幕滑動(dòng)功能運(yùn)用

    詳解Android應(yīng)用開(kāi)發(fā)中Scroller類的屏幕滑動(dòng)功能運(yùn)用

    這篇文章主要介紹了詳解Android應(yīng)用開(kāi)發(fā)中Scroller類的屏幕滑動(dòng)功能運(yùn)用,文中包括各種觸摸滑屏手勢(shì)相關(guān)方法的示例,需要的朋友可以參考下
    2016-02-02
  • Android在WebView中調(diào)用系統(tǒng)下載的方法

    Android在WebView中調(diào)用系統(tǒng)下載的方法

    這篇文章主要為大家詳細(xì)介紹了Android在WebView中調(diào)用系統(tǒng)下載的簡(jiǎn)單使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • android RecycledViewPool的作用詳解

    android RecycledViewPool的作用詳解

    本文給大家介紹RecycledViewPool的作用,它是RecyclerView的緩存池,用于存儲(chǔ)暫時(shí)用不到但可能后續(xù)復(fù)用的ViewHolder,文章詳細(xì)解釋了viewType的概念,以及頻繁創(chuàng)建ViewHolder的原因,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Android Activity切換動(dòng)畫詳解及實(shí)例

    Android Activity切換動(dòng)畫詳解及實(shí)例

    這篇文章主要介紹了Android Activity切換動(dòng)畫overridePendingTransition詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Android Studio 安裝配置方法完整教程【小白秒懂】

    Android Studio 安裝配置方法完整教程【小白秒懂】

    這篇文章主要介紹了Android Studio 安裝配置方法完整教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-03-03
  • Android之TextView自適應(yīng)大小

    Android之TextView自適應(yīng)大小

    對(duì)于設(shè)置TextView的字體默認(rèn)大小對(duì)于UI界面的好看程度是很重要的,小屏幕設(shè)置的文字過(guò)大或者大屏幕設(shè)置的文字過(guò)小都造成UI的不美觀。現(xiàn)在就讓我們學(xué)習(xí)自適應(yīng)大小的TextView控件。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • ubuntu用wifi連接android調(diào)試程序的步驟

    ubuntu用wifi連接android調(diào)試程序的步驟

    這篇文章主要介紹了ubuntu用wifi連接android調(diào)試程序的步驟,需要的朋友可以參考下
    2014-02-02
  • Android NDK開(kāi)發(fā)簡(jiǎn)單程序分享(Hello Word!)

    Android NDK開(kāi)發(fā)簡(jiǎn)單程序分享(Hello Word!)

    本文主要對(duì)Android NDK開(kāi)發(fā)簡(jiǎn)單程序(Hello Word!)的實(shí)現(xiàn)步驟及方法進(jìn)行詳細(xì)介紹。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • Android路由框架Router分析詳解

    Android路由框架Router分析詳解

    本篇文章主要介紹了Android路由框架Router分析詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • android實(shí)現(xiàn)九宮格程序

    android實(shí)現(xiàn)九宮格程序

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)九宮格程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論

安化县| 巴马| 柘荣县| 桂东县| 叶城县| 平顺县| 建宁县| 湘阴县| 洛浦县| 辉县市| 通海县| 手机| 保德县| 石城县| 垫江县| 蓬溪县| 剑川县| 富川| 且末县| 宜良县| 营口市| 佛学| 鄂温| 河津市| 鹰潭市| 广汉市| 扬中市| 安新县| 镇坪县| 安顺市| 华容县| 银川市| 竹山县| 琼中| 高要市| 阿克| 三亚市| 定远县| 宕昌县| 湖州市| 台南县|