1. 程式人生 > 實用技巧 >Android開發筆記(十五)——Activity的跳轉和資料傳遞

Android開發筆記(十五)——Activity的跳轉和資料傳遞

先新建好兩個Activity分別命名為 AActivityBActivity

顯式跳轉和隱式跳轉

顯式跳轉
示例程式碼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 就帶著 intentintent 中帶著資料就傳送到了 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顯示“我回來啦”