如何切换到自定义的Activity

一. 新建一个空的工程,并添加一个按钮

二.新建一个布局文件,命名为my_aty, 并添加一个文本

三.新建一个类,命名为MyAty,并重写onCreate函数

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_aty);//绑定布局文件
    }

四.修改MainAcitivity.java,启动MyAty

   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btnStartMyAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,MyAty.class));
            }
        });
    }

五.在AndroidManifestAcivity.xml中注册MyAty

 <activity android:name=".MyAty"/>

六.运行结果

PS:还可以采用另一种方式实现activity之间的切换,即隐式Intent

在MyAty中添加一个常量

public static final String ACTION = "com.example.luozhenshan.learnintent.intent.action.MyAty";

 MainAcitivity.java中的代码修改为:

startActivity(new Intent(MyAty.ACTION));

AndroidManifest.xml中的代码修改为:

<activity android:name=".MyAty">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="com.example.luozhenshan.learnintent.intent.action.MyAty"/>
            </intent-filter>
        </activity>

 使用隐式Intent可实现跨应用调用Activity

一.在同一个project中新建一个模块,命名为App1,并在布局文件中添加一个按钮

此时会显示有两个不同的App:App和App1

二. 修改App1的MainActivity.java的onCreate函数

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btnStartMyAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent("com.example.luozhenshan.learnintent.intent.action.MyAty"));
            }
        });
    }

三.运行结果

如何禁止一个Activity被别的App调用

将MyAty的exported属性设置为false即可。

 <activity android:name=".MyAty" android:exported="false">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="com.example.luozhenshan.learnintent.intent.action.MyAty"/>
            </intent-filter>
        </activity>

一旦别的应用调用MyAty,程序会抛出异常,因此在App1的MainActivity.java中对异常进行处理

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btnStartMyAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    startActivity(new Intent("com.example.luozhenshan.learnintent.intent.action.MyAty"));
                }
                catch(Exception e)
                {
                    Toast.makeText(MainActivity.this,"can not run the activity",Toast.LENGTH_LONG).show();
                }
            }
        });
    }

运行结果

原文地址:https://www.cnblogs.com/happygirl-zjj/p/4707294.html