一. putExtra()方法的作用
- 先來說下intent的作用彰檬,intent是Android程序中各組件之間進(jìn)行交互的一種重要方式壁袄,一般被用來啟動(dòng)活動(dòng)户魏、啟動(dòng)服務(wù)以及發(fā)送廣播等赁项;intent在啟動(dòng)Activity的時(shí)候可以傳遞數(shù)據(jù),比如說給另一個(gè)Activity傳遞數(shù)據(jù)温治,那么活動(dòng)與活動(dòng)之間是怎樣進(jìn)行數(shù)據(jù)傳遞的呢?
- 這時(shí)候就需要用到putExtra()方法戒悠。intent中提供一系列的putExtra()方法的重載熬荆,可以把想要傳遞的數(shù)據(jù)暫存在intent中,當(dāng)另一個(gè)活動(dòng)啟動(dòng)后绸狐,再把這些數(shù)據(jù)從intent緩存中取出即可卤恳。
- putExtra("A", B)方法中,AB為鍵值對(duì)寒矿,第一個(gè)參數(shù)為鍵名突琳,第二個(gè)參數(shù)為鍵對(duì)應(yīng)的值,這個(gè)值才是真正要傳遞的數(shù)據(jù)符相。舉個(gè)栗子:
String data = "Hello World";
...
intent.putExtra("extra_data", data);
既然數(shù)據(jù)是傳遞給另一個(gè)Activity的拆融,那另一個(gè)Activity怎么獲取這個(gè)數(shù)據(jù)(鍵值對(duì))呢?這個(gè)時(shí)候就需要用到get×××Extra()方法,那“×××”又是啥意思呢镜豹?其實(shí)它是數(shù)值類型傲须。比如上例中的鍵值對(duì)("extra_data", data),data的類型是String趟脂,那么獲取這組數(shù)據(jù)的方法就是getStringExtra()泰讽。同理,還有getIntExtra()散怖、getBooleanExtra()等方法菇绵。
二. 實(shí)戰(zhàn)練習(xí)
??光說不練假把式,我們學(xué)習(xí)新知識(shí)點(diǎn)的時(shí)候都應(yīng)該多敲代碼多練習(xí)镇眷,以加深記憶咬最!下面我就寫一個(gè)栗子: (注:環(huán)境為Android Studio 4.0)
??這個(gè)栗子的思路就是在第一個(gè)活動(dòng)(MainActivity)里新建2個(gè)文本輸入框EditText,然后再新建一個(gè)Button欠动,添加點(diǎn)擊事件永乌,當(dāng)點(diǎn)擊Button時(shí),MainActivity中的2個(gè)TextView中輸入的內(nèi)容同時(shí)在第二個(gè)活動(dòng)SecondActivity中的TextView中顯示出來具伍。
1. 新建第一個(gè)Activity:MainActivity
??以下是MainActivity的源碼:
public class MainActivity extends AppCompatActivity {
//聲明控件對(duì)象
private EditText editText1;
private EditText editText2;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取控件的對(duì)象
editText1 = findViewById(R.id.edit_1);
editText2 = findViewById(R.id.edit_2);
button = findViewById(R.id.button);
//為Button綁定監(jiān)聽器
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//獲取文本輸入框中的內(nèi)容
String editTextStr1 = editText1.getText().toString();
String editTextStr2 = editText2.getText().toString();
//創(chuàng)建intent對(duì)象翅雏,參數(shù)分別為上下文、要跳轉(zhuǎn)的Activity類
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//將要傳遞的值附加到Intent對(duì)象中暫時(shí)保存
intent.putExtra("extra_data1", editTextStr1);
intent.putExtra("extra_data2", editTextStr2);
//啟動(dòng)該intent對(duì)象人芽,實(shí)現(xiàn)Activity跳轉(zhuǎn)
startActivity(intent);
}
});
}
}
??MainActivity對(duì)應(yīng)的布局文件為activity_main.xml望几,使用簡單的LinearLayout線性布局,控件排布為從上到下依次為文本輸入框萤厅、文本輸入框橄抹、按鈕。其源碼為:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/edit_1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edit_2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"
android:textAllCaps="false" />
</LinearLayout>
2. 新建第二個(gè)Activity:SecondActivity
public class SecondActivity extends AppCompatActivity {
//聲明TextView對(duì)象
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//獲取TextView控件對(duì)象
textView = findViewById(R.id.text_view);
//獲取啟動(dòng)該Activity的Intent對(duì)象
Intent intent = getIntent();
//獲取Intent中暫存的數(shù)據(jù)
String data1 = intent.getStringExtra("extra_data1");
String data2 = intent.getStringExtra("extra_data2");
//將MainActivity中兩個(gè)輸入框的輸入的內(nèi)容一同在SecondActivity的TextView控件中顯示出來
textView.setText(data1 + " " + data2);
}
}
??SecondActivity的布局文件activity_second.xml比較簡單惕味,就是一個(gè)簡單的文本顯示控件TextView楼誓,就不貼代碼了。
三. 運(yùn)行結(jié)果
- 點(diǎn)擊AndroidStudio的run按鈕運(yùn)行程序名挥,程序首先進(jìn)入MainActivity疟羹,在Android模擬器中運(yùn)行的結(jié)果如下圖所示:
- 在兩個(gè)文本輸入框中依次輸入“Hello world!”禀倔、“Awesome Awesome榄融!”,點(diǎn)擊當(dāng)前UI中的Button按鈕救湖,程序跳轉(zhuǎn)到SecondActivity,運(yùn)行的結(jié)果如下圖所示:
- 這樣剃袍,我們就通過intent.putExtra()方法將一個(gè)活動(dòng)的數(shù)據(jù)傳遞到了第二個(gè)活動(dòng)中,并顯示出來捎谨。
(寫在最后:請(qǐng)大神勿噴民效,這是本人的自學(xué)筆記憔维,旨在鞏固自學(xué)過程中的學(xué)習(xí)效果,如果能給Android小白帶來一點(diǎn)點(diǎn)幫助畏邢,就再好不過了)