Intent的跳转方式


第一种跳转方式 ,简单跳转
发送:
        Intent intent = new Intent(ActivityA.this, ActivityB.class);
        startActivity(intent);
第二种跳转方式,带数据跳转:
1.携带一些附加信息键值对
2.通过使用putextra()方法添加数据,使用getXXXExtra()方法获取数据
3.复杂数据实现Parcelable接口或者Serializable接口来传递

        Intent intent = new Intent(ActivityA.this, ActivityB.class);
        intent.putExtra("Message", "This message from Activity A!");//键值对方式
        startActivity(intent);
     接收方:
        Intent intent = getIntent();
        String msg = intent.getStringExtra("Message");
        待返回值跳转:
        发送方:
        Intent intent = new Intent();
        intent.setClass(ActivityA.this, ActivityB.class);
        startActivityForResult(intent, REQUEST_CODE);
        重写onActivityResult方法

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.i(TAG, "onActivityResult");
        if(requestCode == REQUEST_CODE) {
            switch (resultCode) {
                case RESULT_OK: {
                }
                    break;
            }
        }
    }   
        接收方:
        Intent intent = new Intent();
        intent.putExtra("Message", "This message return from Activity B!");
        setResult(RESULT_OK, intent);
        finish();   
Intent的标志位 Flag
Intent指定Activity的启动方式:设置intent的Flags来指定Activity的启动方式,这里有两种介绍一下
1.FLAG_ACTIVITY_NEW_TASK
如果intent设置的flag对应跳转的activity的任务栈没有指定新的任务栈,则新启动的Activity进入栈顶,如果
对应跳转的activity的指定了别的任务栈,则该activity启动后处在新的任务栈;
        <!--<activity android:name=".ActivityC" />-->//不会新建任务栈


        <activity
            android:name=".ActivityC"
            android:taskAffinity="com.netease.study.intent.ActivityB"/>//会新建任务栈
新建任务栈下的adb命令行下的栈如下:
   Running activities (most recent first):
    TaskRecord{533b88c4 #22 A com.netease.study.intent.ActivityB U 0}
      Run #6: ActivityRecord{533a9b20 u0 com.netease.study.intent/.ActivityC}
    TaskRecord{5335a8a8 #21 A com.netease.study.intent U 0}
      Run #5: ActivityRecord{53310730 u0 com.netease.study.intent/.ActivityB}
      Run #4: ActivityRecord{5330d9d4 u0 com.netease.study.intent/.ActivityA}
2.FLAG_ACTIVITY_SINGLE_TOP
这个和activity的启动方式很像,如果当前activity处于栈顶则不新建activity,
如果该activity应启动,不处于栈顶,则会新建一个该活动
如果ActivityC 第一次启动则:
  Running activities (most recent first):
    TaskRecord{5332e528 #23 A com.netease.study.intent U 0}
      Run #6: ActivityRecord{5336f83c u0 com.netease.study.intent/.ActivityC}
      Run #5: ActivityRecord{534c06bc u0 com.netease.study.intent/.ActivityB}
      Run #4: ActivityRecord{532e5f60 u0 com.netease.study.intent/.ActivityA}
      如果此时ta已在栈顶:
  Running activities (most recent first):
    TaskRecord{5332e528 #23 A com.netease.study.intent U 0}
      Run #6: ActivityRecord{5336f83c u0 com.netease.study.intent/.ActivityC}
      Run #5: ActivityRecord{534c06bc u0 com.netease.study.intent/.ActivityB}
      Run #4: ActivityRecord{532e5f60 u0 com.netease.study.intent/.ActivityA}
此时 c调用的是 onNewIntent方法 !
    public void startActivityC(View v) {
        Intent intent = new Intent();
        intent.setClass(this, ActivityC.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);
    }


3.FLAG_ACTIVITY_CLEAR_TOP
这个和activity的singletask很相像,当activity已经处于栈中,但不处于栈顶,这个时候,如果该activity启动
则会把处在该activity前的activity给clear掉
 
 
 
                          
 第三种,指定组件跳转:
 例如:
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_DIAL);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        startActivity(intent);
       
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:1320010001"));
        startActivity(intent);
        不指定组件跳转:隐式跳转
        需要在清单文件中进行:
        
        <activity android:name=".ShareActivity">
            <intent-filter>

                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="text/plain"/>
                <!--<data android:mimeType="image/*"/>-->
                <!--<data android:mimeType="audio/*"/>-->
                <!--<data android:mimeType="video/*"/>-->

            </intent-filter>
        </activity>
        然后在Activity
    public void shareTextContent(View v) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
        intent.setType("text/plain");
        startActivity(intent);
    }        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值