Android開發筆記(十五)——Activity的跳轉和資料傳遞
先新建好兩個Activity分別命名為 AActivity
和 BActivity
顯式跳轉和隱式跳轉
顯式跳轉:
示例程式碼1:(一般採用這種方法)
mBtnJump.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //顯示1 Intent intent = new Intent(AActivity.this,BActivity.class); startActivity(intent); } });
示例程式碼2:
mBtnJump.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //顯示跳轉2 Intent intent = new Intent(); intent.setClass(AActivity.this,BActivity.class); startActivity(intent); } });
示例程式碼3:
mBtnJump.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //顯示跳轉3 Intent intent = new Intent(); intent.setClassName(AActivity.this,"com.example.myapplication.jump.BActivity"); startActivity(intent); } });
示例程式碼4:
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//顯示跳轉4
Intent intent = new Intent();
intent.setComponent(new ComponentName(AActivity.this,"com.example.myapplication.jump.BActivity"));
startActivity(intent);
}
});
隱式跳轉:
在 AndroidManifest.xml
中設定 BActivity
的 </intent-filter>
屬性如下:
<activity android:name=".jump.BActivity"
android:label="B">
<intent-filter>
<action android:name="com.example.test.BActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
然後在 AActivity.java
中進行隱式跳轉的程式碼編寫:其中 setAction
的內容就是在 AndroidManifest.xml
中設定 BActivity
的 </intent-filter>
中的 action
:
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//隱式跳轉1
Intent intent = new Intent();
intent.setAction("com.example.test.BActivity");
startActivity(intent);
}
});
Activity之間的資料傳遞
在 AActivity
中, bundle
裡面放了一些資料,然後把 bundle
放到 intent
中去:
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//顯示1
Intent intent = new Intent(AActivity.this,BActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name","布丁");
bundle.putInt("number",44);
intent.putExtras(bundle);
startActivity(intent);
}
});
這樣 AActivity
就帶著 intent
, intent
中帶著資料就傳送到了 BActivity
中。
BActivity
如何接受資料?在 BActivity.java
中的 onCreate
函式中新增:
mTvTitle=findViewById(R.id.tv_title);
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
int number = bundle.getInt("number");
mTvTitle.setText(name+','+number);
AActivity通過跳轉頁面把資料傳到的BActivity中的TextView中,這樣就實現了兩個Activity之間的資料傳遞。
startActivityForResult:啟動Activity,結束後返回結果
startActivityForResult
:當從AActivity跳轉到BActivity中之後,再次返回AActivity,希望從BActivity返回一些資料給AActivity,就可以通過該方法實現。
把之前的 startActivity(intent);
替換成如下程式碼: 其中第二個引數是請求碼,可以根據請求碼來判斷是哪一步跳轉過去的:
startActivityForResult(intent,0);
在BActivity中新增一個Button,新增一個點選事件:
mBtnFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
Bundle bundle1 = new Bundle();
bundle1.putString("title","我回來啦");
intent.putExtras(bundle1);
setResult(Activity.RESULT_OK,intent);
finish();
}
});
然後就回到了AActivity介面。
這時候AActivity如何接受BActivity返回的資料?使用 onActivityResult
這個方法。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(AActivity.this,data.getExtras().getString("title"),Toast.LENGTH_LONG).show();
}
這時從BActivity返回AActivity的時候,會彈出一個Toast顯示“我回來啦”