Intent的使用


title: Intent的使用
date: 2019-08-23 16:43:59
tags: android


如何使用Intent打開(kāi)新Activity以及實(shí)現(xiàn)Activity之間的數(shù)據(jù)傳遞

Intent的一個(gè)重要作用就是遮婶,打開(kāi)Activity以及作為不同Activity之間數(shù)據(jù)傳送的載體旗扑。

如何在MainActivity中打開(kāi)一個(gè)新的Activity

Activity類(lèi)有個(gè)方法叫startActivity(Intent intent)臀防,我們可以用它來(lái)啟動(dòng)一個(gè)新的activity边败。

Intent intent = new Intent(Context, Class);
// Context 傳一個(gè)上下文,一般傳當(dāng)前的Activity
// Class 傳你要打開(kāi)的activity的類(lèi)
startActivity(intent);

例:點(diǎn)一下按鈕就打開(kāi)一個(gè)新頁(yè)面

Button btn = findViewById(R.id.btn_go_to_second_activity);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // 這里相當(dāng)于內(nèi)部類(lèi)致燥,調(diào)用外部類(lèi)的時(shí)候篡悟,要用 外部類(lèi)名.this 來(lái)調(diào)用
                Toast.makeText(FirstActivity.this, "Intent to SecondActivity", Toast.LENGTH_SHORT).show();

                // 這里使用的是Intent的顯式用法
                // 按下按鈕就打開(kāi)SecondActivity
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });

以上是所謂的Intent顯式用法匾寝,除此之外艳悔,還有一種所謂的隱式用法女仰。

使用隱式用法需要在AndroidManifest.xml中配置要打開(kāi)的activity的intent-filter

在啟動(dòng)新活動(dòng)的時(shí)候,只有Intent里的action和category與目標(biāo)活動(dòng)中配置的相匹配才能成功打開(kāi)乔外。

例:我在第二個(gè)活動(dòng)設(shè)置一個(gè)按鈕杨幼,點(diǎn)一下回到第一個(gè)活動(dòng),只是這一次使用隱式用法差购。

 <activity
            android:name=".FirstActivity"
            android:label="@string/FirstActivityLabel">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <!-- 在這里 添加action -->
                <action android:name="com.konka.GO_BACK_TO_FIRST_ACTIVITY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                Intent intent = new Intent("com.konka.GO_BACK_TO_FIRST_ACTIVITY");
                startActivity(intent);
            }
        });

這里沒(méi)有設(shè)置category,系統(tǒng)就使用默認(rèn)值 android.intent.category.DEFAULT 了饼暑。

如果你不用默認(rèn)值的話洗做,你可以用intent.addCategory()方法來(lái)添加category竭望。

個(gè)人認(rèn)為咬清,隱式用法是一種更好的方法奴潘,因?yàn)楸容^方便維護(hù)

如何通過(guò)Intent來(lái)傳遞數(shù)據(jù)呢?

Intent intent = new Intent(FirstActivity.this, ThirdActivity.class);

// putExtra(String key, String/int/boolean value)
// 這個(gè)方法能將數(shù)據(jù)打包進(jìn)intent里面
// 在新活動(dòng)里使用getIntent().getStringExtra(Sring key)獲得傳過(guò)去的數(shù)據(jù)
intent.putExtra("FirstData", "1ST HELLO WORLD");
startActivity(intent);

// startActivityForResult(Intent intent, int requestCode)
// 這個(gè)方法的作用也是打開(kāi)新活動(dòng)掘剪,但是要求新活動(dòng)銷(xiāo)毀時(shí)返回?cái)?shù)據(jù)夺谁。
// requestCode是用來(lái)識(shí)別返回的數(shù)據(jù)是來(lái)自哪一個(gè)活動(dòng)的匾鸥,只要唯一就好碉纳。

在打開(kāi)的新活動(dòng)里劳曹,用getIntent()得到一個(gè)Intent對(duì)象,調(diào)用getStringExtra()方法锭硼,能取得傳過(guò)來(lái)的數(shù)據(jù)蜕劝。如果傳的是int或boolean型就用對(duì)應(yīng)的getIntExtra()和getBooleanExtra()方法獲取就好熙宇。

例:

Intent intent = getIntent();
Log.d(TAG, "onCreate: " + intent.getStringExtra("FirstData"));

如果要在這個(gè)活動(dòng)銷(xiāo)毀的時(shí)候返回?cái)?shù)據(jù)給上一個(gè)活動(dòng),那么上一個(gè)活動(dòng)得使用startActivityForResult()來(lái)打開(kāi)這個(gè)活動(dòng)蒋荚。

在這個(gè)活動(dòng)期升,可以重寫(xiě)onBackPressed()方法

@Override
    public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("DataReturn", "I AM BACK");
        setResult(RESULT_OK, intent);
        finish();
    }

這里的重點(diǎn)是要使用setResult()方法將intent傳進(jìn)去。

setResult(int resultCode, Intent data)

由于使用onActivityForResult()來(lái)打開(kāi)新活動(dòng)播赁,新活動(dòng)被銷(xiāo)毀之后會(huì)回調(diào)上一個(gè)活動(dòng)的onActivityResult()方法容为。因此我們要重寫(xiě)這個(gè)方法來(lái)獲取傳過(guò)來(lái)的數(shù)據(jù)坎背。

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
        switch (requestCode){
            case 3:
                if (resultCode == RESULT_OK){
                    String returnedData = data.getStringExtra("DataReturn");
                    Log.d(TAG, "onActivityResult: "+ returnedData);
                }
                break;
            default:
        }
    }

參考書(shū)

《第一行代碼 Android》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末得滤,一起剝皮案震驚了整個(gè)濱河市懂更,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌龄捡,老刑警劉巖皂股,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蘑辑,居然都是意外死亡坠宴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)庄岖,“玉大人隅忿,你說(shuō)我怎么就攤上這事邦尊。” “怎么了优烧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蝉揍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我畦娄,道長(zhǎng)又沾,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任熙卡,我火速辦了婚禮杖刷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘再膳。我一直安慰自己挺勿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布喂柒。 她就那樣靜靜地躺著不瓶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昭娩,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音填物,去河邊找鬼莱褒。 笑死沛励,一個(gè)胖子當(dāng)著我的面吹牛坤候,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徒河,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼代兵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼植影!你這毒婦竟也來(lái)了羡微?” 一聲冷哼從身側(cè)響起各墨,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤结洼,失蹤者是張志新(化名)和其女友劉穎筷厘,沒(méi)想到半個(gè)月后宏所,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坷剧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年狞尔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽车。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逸月,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翰意,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布堤如,位于F島的核電站蝗岖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邢享,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赠尾,春花似錦、人聲如沸咆霜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脂矫。三九已至佩微,卻和暖如春扒俯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工斋配, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甩卓,地道東北人蛛勉。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Intent 介紹 Intent 是 Android 程序中各組件之間進(jìn)行交互的一種重要方式躲胳,它不僅可以指明當(dāng)前組...
    OoFLYoO閱讀 501評(píng)論 0 0
  • 1泉坐、何為 Intent Intent(意圖)主要用于 Android 各組件之間的交互纯丸,它可以指明當(dāng)前組件想要執(zhí)行...
    GinkWang閱讀 3,177評(píng)論 0 1
  • 什么是Intent Intent是Android程序中各組件之間進(jìn)行交互的一種重要方式,它不僅可以指明當(dāng)前組件想要...
    其實(shí)我很菜啊閱讀 1,730評(píng)論 2 2
  • Intent組件雖然不是四大組件,但卻是連接四大組件的橋梁,學(xué)習(xí)好這個(gè)知識(shí),也非常的重要溺蕉。 一肛走、什么是Intent...
    困惑困惑困惑閱讀 1,509評(píng)論 0 0
  • Intent在Android中使用很廣泛梢褐,是Android程序中各組件進(jìn)行交互的一種重要方式,不僅可以指明當(dāng)前組件...
    Glemontree閱讀 1,426評(píng)論 0 0