美文网首页
Kotlin 实现Activity之间的跳转

Kotlin 实现Activity之间的跳转

作者: hehtao | 来源:发表于2017-06-20 16:22 被阅读5132次
    fun jump(view: View) {
            val intent = Intent() 
            //获取intent对象
            intent.setClass(this,Main2Activity::class.java)
             // 获取class是使用::反射(那么问题来了,反射是个什么鬼?👻👻👻👻小白的悲哀啊,赶紧研究研究去)
            startActivity(intent)
        }
    
    • 在MainActivity代码中使用Java语言进行跳转:
      原文链接

    M1. 通过class跳转

    Intent intent = new Intent();  
    //(当前Activity,目标Activity)  
    intent.setClass(MainActivity.this, TestActivity.class);  
    startActivity(intent);  
    

    M2、为Activity设置Action,通过Action跳转

    Intent intent = new Intent();  
    //(声明中的Action)  
    intent.setAction("gesoft_cx");  
    //(声明中的Category)  
    intent.addCategory("android.intent.category.DEFAULT");  
    startActivity(intent);  
    

    上面的Action和Category应该与Activity声明中设置的Action和Category相同

    <activity android:name="com.cx.testdemo.TestActivity">  
        <!-- intent-filter:过滤器一 -->  
          <intent-filter >  
            <!-- action随便设置,但必须保证唯一 -->  
                <action android:name="gesoft_cx"/>  
                <category android:name="android.intent.category.DEFAULT"/>  
          </intent-filter>  
    </activity>  
    

    M3、跳转到其他应用界面

    Intent intent = new Intent();  
    (目标应用的包名,目标应用的目标Activity)  
    intent.setClassName("com.imooc.mooo", "com.imooc.mooo.MainListActivity");  
    startActivity(intent);  
    

    目标Activity需要添加exported="true"属性
    M4、自定义权限
    如果目标应用不希望其他应用跳转到 自身页面,可以增加自定义权限:1)在Activity声明标签中增加permission(权限)属性,属性值随便设置,但必须唯一

    <activity  
         android:permission="gesoft.cx"  
         android:name="com.imooc.mooo.MainListActivity"  
         android:label="@string/app_name" >  
         <intent-filter>  
               <action android:name="android.intent.action.MAIN" />  
               <category android:name="android.intent.category.LAUNCHER" />  
         </intent-filter>  
    </activity>  
    

    增加自定义权限,属性name的值与上面permission属性值相同,属性protectionLevel(安全级别)根据需要(普通normal)设置

    <!-- 自定义权限,防止其他应用访问 -->  
    <permission   
          android:name="gesoft.cx"  
          android:protectionLevel="normal">  
    </permission>  
    

    这时在使用3中的方法进行跳转就会报错。如果还要访问就必须在当前应用中添加一个与目标应用相对应的权限:

    <uses-permission android:name="gesoft.cx" />

    注意:将权限name属性值设为"gesoft_cx"时,出现错误。

    M5、页面跳转与数据回传
    A启动B,B页面中的数据可以回传给AstartActivityForResult(intent, requestCode);//requestCode请求的标识//resultCode:第二个页面返回的标识//data:第二个页面回传的数据A页面通过
    onActivityResult(int requestCode, int resultCode, Intent data)方法接收回传过来的数据B页面通过setResult(resultCode, data)方法回传数据给A页面
    代码示例:
    1、布局文件,两个Activity通用该布局文件。

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        xmlns:tools="http://schemas.android.com/tools"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent" >  
      
        <Button  
            android:id="@+id/button1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignParentLeft="true"  
            android:layout_alignParentTop="true"  
            android:text="跳转页面" />  
      
        <TextView  
            android:id="@+id/textView1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignParentLeft="true"  
            android:layout_below="@+id/button1" />  
      
    </RelativeLayout>  
    

    2、第一个Activity代码

    package com.cx.intenttest;  
      
    import android.app.Activity;  
    import android.content.Intent;  
    import android.os.Bundle;  
    import android.view.View;  
    import android.view.View.OnClickListener;  
    import android.widget.Button;  
    import android.widget.TextView;  
      
    public class MainActivity extends Activity implements OnClickListener{  
        private Button button;  
        private TextView textView;  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
              
            button = (Button) findViewById(R.id.button1);  
            textView = (TextView) findViewById(R.id.textView1);  
            button.setOnClickListener(this);  
        }  
      
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            Intent intent = new Intent(this, MyActivity.class);  
            /** 
             * 第一个参数是Intent对象 
             * 第二个参数是请求的一个标识 
             */  
            startActivityForResult(intent, 1);  
        }  
          
        /** 
         * 通过startActivityForResult跳转,接收放回数据的方法 
         * requestCode:请求的标识 
         * resultCode:第二个页面返回的标识 
         * data:第二个页面回传的数据 
         */  
        @Override  
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            // TODO Auto-generated method stub  
            if(requestCode == 1 && resultCode == 2){  
                String content = data.getStringExtra("data");  
                textView.setText(content);  
            }  
        }  
    }  
    

    3、第二个Activity页面代码

    package com.cx.intenttest;  
      
    import android.app.Activity;  
    import android.content.Intent;  
    import android.os.Bundle;  
    import android.view.View;  
    import android.view.View.OnClickListener;  
    import android.widget.Button;  
      
    public class MyActivity extends Activity implements OnClickListener{  
        private Button button;  
          
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            // TODO Auto-generated method stub  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
              
            button = (Button) findViewById(R.id.button1);  
            button.setText("回传数据");  
            button.setOnClickListener(this);  
        }  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            //回传到第一个页面的数据实际上是一个Intent对象  
            Intent data = new Intent();  
            data.putExtra("data", "回传数据");  
            setResult(2, data);  
            finish();  
        }  
    }  
    

    不要忘记Activity的声明注册。。。

    相关文章

      网友评论

          本文标题:Kotlin 实现Activity之间的跳转

          本文链接:https://www.haomeiwen.com/subject/slfaqxtx.html