Activity入门1——activity跳转

activity跳转

显式跳转

Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);

显式跳转的特点是,intent中包含要跳转过去的组件的.class。

通常用于app内部的跳转。

隐式跳转

Intent intent = new Intent();
        intent.setAction("com.example.Login");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        startActivity(intent);

隐式跳转的特点是,intent内并未制定要跳转过去的组件,而是通过设定action和category来由系统判断跳转的位置。

<activity android:name=".ThirdActivity">
            <intent-filter>
                <action android:name="com.example.Login"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

 在manifest文件中,可以为某个活动配置特定的action和category,来实现跳转到该活动。需要注意,只有action和category都匹配上才能正确识别。

action是必须要赋值的,category如果不填写的话会自动填充一个默认值。

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://baidu.com"));
        startActivity(intent);

通过以上代码可以跳转到默认浏览器。可见隐式跳转常用于app外部的跳转。 

跳转时传数据

向下一个activity传数据

 Intent intent = new Intent();
        intent.setAction("com.example.Login");
        intent.putExtra("account", accountText);
        intent.putExtra("password", passwordText);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        startActivity(intent);

intent里面有一个bundle成员变量,我们向里面设置数据即可。 

向上一个activity传数据

活动a跳转到活动b,且活动a需要接收活动b返回时传的数据,a和b都要做以下改进:

活动a:

Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra("account", accountText);
        intent.putExtra("password", passwordText);
        startActivityForResult(intent, 111);


@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        switch (requestCode) {
            case 111:
                if (resultCode == RESULT_OK) {
                    String response = intent.getStringExtra("back");
                    Toast.makeText(this, response, Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }

活动b:

@Override
    public void onBackPressed() {
        backAndSendMessage();
    }

    private void backAndSendMessage() {
        Intent intent = new Intent();
        intent.putExtra("back", "back to main activity!");
        setResult(RESULT_OK, intent);
        finish();
    }

在代码中111是活动a传入的请求码,活动b返回后的请求码就是该值。

活动b返回后将数据赋值到intent里,随后活动a会调用onActivityResult方法。首先通过请求码判断数据来自于活动b,再根据intent里的响应码判断逻辑分类,最后从intent的bundle里取出数据。

通常,请求码用来区分业务场景。比如上面的代码中,请求码111代表登陆页面的返回数据,请求码112代表充值页面的返回数据。

在同一个请求码中,通过结果码进行业务逻辑区分。在处理充值页面返回数据的请求码112中,请求码有“充值成功”和“充值失败”的区分,进而做不同的处理。

case1:启动相机回传拍摄图片

启动相机活动后,拍摄完照片返回,从返回的intent中取回图片。

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值