创建一个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
网友评论