美文网首页Android
Activity系列——Activity配置和使用

Activity系列——Activity配置和使用

作者: 似焰如火 | 来源:发表于2020-02-10 10:15 被阅读0次

    创建一个Activity的实现类很是简单,有如下代码即可:

    public class myActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    

    一般需要重写onCreate方法,并通过setContentView设置布局文件。完事后,我们还需要在AndroidManifest.xml中对Activity进行注册。

    1. 需要配置啥

    创建一个Activity子类后,需要在AndroidManifest.xml中进行注册,所谓注册就是写一段如下配置字段

            <activity android:name="myActivity"
                android:label="@string/Activity_label"
                android:icon="@drawable/ic_launcher_background"
                android:exported="true"
                android:launchMode="standard">
                <intent-filter>
                    <action android:name="android.intent.action.QQ" />
                </intent-filter>
            </activity>
    

    说一下这些代表什么意思:

    • android:name="myActivity",用于指定Activity实现类的类名,该名必须和类名相同
    • android:label="@string/Activity_label",用于指定该Activity的标签
    • android:icon="@drawable/ic_launcher_background",指定图标
    • android:exported="true",配置该Activity是否可以被其他应用调用
    • android:launchMode="standard",配置Activity的加载模式,不同的加载模式介绍可以参考Activity系列——加载模式。
    • <intent-filter ... >,指定一个或多个intent-filter,用于说明该Activity可以响应哪些Intent。

    3. 怎么使用

    一个Android应用一般包含多个Activity,其中有一个比较特殊,它是整个程序的入口,我们不妨叫它MainActivity,Android启动时会自动启动这个Activity。为何启动这个呢?因为这个MainActivity的配置中写了这些东西

            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    

    android.intent.action.MAIN,指定应用程序最先启动的Activity android.intent.category.LAUNCHER,表示activity应该被列入系统的启动器(launcher)(允许用户启动它)。Launcher是安卓系统中的桌面启动器,是桌面UI的统称。
    MainActivity是自动启动执行的,其它Activity则可以有MainActivity直接或间接启动。一个Activity启动其它Activity有两种方法,如下

    • startActivity(Intent intent)
      通过给定的Intent启动相应的Activity
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Intent intent = new Intent(MainActivity.this, myActivity.class);
            startActivity(intent);
        }
    }
    
    • startActivityForResult(Intent intent, int requestCode),注意requestCode需要 >= 0,否则没有返回,可参考https://blog.csdn.net/yanzhenjie1003/article/details/99656633
      多了一个请求码参数,使用该方法启动Activity时,程序会等待新启动Activity返回的结果,当然这需要重写onActivityResult方法

    用一个例子来说明第二种,例如在MainActivity中使用这个方法启动myActivity,并等待其返回结果。那么,MainActivity是如何获取到返回结果的呢?myActivity被启动后,何时返回结果并确定,开发者需要重写onActivityResult方法来等待被回调。

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent intent) {
            super.onActivityResult(requestCode, resultCode, intent);
            if (requestCode == 0 && resultCode == 0) {
                Bundle data = intent.getExtras();
                String result = data.getString("code");
                show.setText(result);
            }
        }
    

    而在myActivity中需要通过setResult设置一个返回值resultCode。

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bt1 = findViewById(R.id.bt1);
            bt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = getIntent();
                    intent.putExtra("code","你好,中国");
                    myActivity.this.setResult(0,intent);
                    myActivity.this.finish();
                }
            });
        }
    

    4. 用例详细代码

    myActivity.java

    public class myActivity extends Activity {
        public Button bt1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bt1 = findViewById(R.id.bt1);
            bt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = getIntent();
                    intent.putExtra("code","你好,中国");
                    myActivity.this.setResult(0,intent);
                    myActivity.this.finish();
                }
            });
    
        }
    }
    

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
        public TextView show;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            show = findViewById(R.id.show);
            Intent intent = new Intent(MainActivity.this, myActivity.class);
            startActivityForResult(intent,0);
           //requestCode要>=0,否则没有返回
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent intent) {
            super.onActivityResult(requestCode, resultCode, intent);
            if (requestCode == 0 && resultCode == 0) {
                Bundle data = intent.getExtras();
                String result = data.getString("code");
                show.setText(result);
            }
        }
    }
    

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name="myActivity"
                android:label="@string/app_name"
                android:icon="@drawable/ic_launcher_background"
                android:exported="true"
                android:launchMode="standard">
                <intent-filter>
                    <action android:name="android.intent.action.QQ" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    5. AndroidManifest.xml文件配置Activity补充

    参考原文https://blog.csdn.net/wusuobupo/article/details/52833357

    相关文章

      网友评论

        本文标题:Activity系列——Activity配置和使用

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