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显示“我回来啦”

posted @ 2020-07-21 14:14  Ylxxxxx  阅读(297)  评论(0编辑  收藏  举报