• Android之Activity的几种跳转方式


    1.显式调用方法

    Intent intent = new Intent(this, OtherActivity.class);//方法1
    
    Intent intent2 = new Intent();
    
    intent2.setClass(this, OtherActivity.class);//方法2
    intent2.setClassName(this, "com.mh.MainActivity.OtherActivity");//方法3,此方法可用于打开其他的应用
    intent2.setComponent(new ComponentName(this, OtherActivity.class));//方法4
    
    startActivity(intent2);
    

    2.隐式调用方法(只要action、category、data和要跳转到的Activity在AndroidManifest.xml中设置的匹配就OK

    <activity android:name="com.mh.MutiActivity.OtherActivity">
        <Intent-filter>
            <action android:name="com.mh.test.action" />
            <category android:name="com.mh.java" />
            <!-- 因为startActivity()方法中内置了该类别,索引必须加上此类别否则android.intent.category.DEFAULT无法跳转 -->
            <category android:name="android.intent.category.DEFAULT" />
            <!-- 设置了哪些,则那些必须匹配,没设置的可以任意写 -->
            <data android:scheme="schemename" android:host="mh.com" android:path="/introduction" />
            <!-- 数据类型 -->
            <data android:mimeType="txt/plain" />
        <intent-filter>
    </activity>
    

    3.跳转到另一个Activity后,当返回时能返回数据

    a.在跳转的Activity端,调用startActivityForResult(intent2, 1)跳转到下一个Activity,其中第一个参数为传入的意图对象,第二个为设置的请求码;

    b.跳转到第二个Activity后,调用setResult(100, intent)方法可返回上一个Activity,其中第一个参数为结果码,第二个为传入的意图对象

    c.在第一个Activity通过onActivityResult()方法获得返回的数据

    --------------------------------------------------------------

    startActivityForResult(Intent intent, int requestCode)
    onActivityResult(int requestCode, int resultCode, Intent data)
    setResult(int resultCode, Intent data)
    这三个函数,尤其要注意他们的参数!
    现在有两个activity A和B,假如我们从A跳转到B,再B完成相应的工作以后finish掉B,然后传数据给A,A在接受到数据以后做相应的操作。我们可以使用这三个函数:
    A:
    //启动B
    Intent intent = new Intent();
    intent.setClass(A.this, B.class);
    startActivityForResult(intent, 2);//2是我们自己定义常量,对应下面使用到的resultCode
    B:
    //do something
    setResult(2, null);
    finish();
    以上主要代码完成后我们需要在A中override onActivityResult()函数:
    A:
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                    super.onActivityResult(requestCode, resultCode, data);
        if (2 == requestCode) {
            //do something
        }
    }

     

    更详细的:
    startActivityForResult与onActivityResult
    androidActivity之间的跳转不只是有startActivity(Intent i)的,startActivityForResult(Intent intent, int requestCode)也是常用的方法。
    其作用是可以用onActivityResult(int requestCode, int resultCode, Intent data)方法获得请求Activity结束之后的操作。
    需要注意三个方法:startActivityForResult(Intent intent, int requestCode),onActivityResult(int requestCode, int resultCode, Intent data),setResult(int resultCode, Intent data)

    例如如下代码:从From跳转至ToB和ToC
    From:
    if(条件){
    Intent intent = new Intent(this, ToB.class);
    startActivityForResult(serverIntent, REQUEST_CODE_01);//跳转至ToB
    }else{
    Intent intent = new Intent(this, ToC.class);
    startActivityForResult(serverIntent, REQUEST_CODE_02);//跳转至ToC
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data){
              switch (requestCode) {
                     case REQUEST_CODE_01:
                            if(resultCode==Activity.RESULT_OK)
                            //do something
                            break;
                     case REQUEST_CODE_02:
                            //do something
                            break;
             }
    }

        这里说说startActivityForResult(Intent intent, int requestCode)的参数,第一个Intent不用说了,需要注意的是第二个,我们用的是REQUEST_CODE_01和REQUEST_CODE_02,其实这个是我们自己定义的一个int型常量,用于标记的,具体作用可在onActivityResult方法里看到,用于判断是从哪个Activity返回的。

    ToB:
    Intent intent = new Intent();
    intent.putExtra(key, value);
    setResult(Activity.RESULT_OK, intent);
    finish();//结束之后会将结果传回From

    ToC:
    Intent intent = new Intent();
    intent.putExtra(key, value);
    setResult(Activity.RESULT_OK, intent);
    finish();//结束之后会将结果传回From

       setResult的第一个参数对应上面onActivityResult的第二个参数,注意别把onActivityResult的第一个参数与第二个参数搞混淆了,一个是请求标记,一个是返回标记。
     
     
    另可看文章:http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html
  • 相关阅读:
    Java 线程:(一)
    RK:Webview、Chrome
    CocosCreator 加载Bundle里的Prefab
    Canvas 绘画
    CocosCreator 要用3D节点实现skewX
    Unity 动态创建网格
    凹多边形三角剖分
    UnityHub 登录失败
    浮点数
    八皇后问题(回溯算法)
  • 原文地址:https://www.cnblogs.com/mumue/p/4076903.html
Copyright © 2020-2023  润新知