Android入门——四大组件之Activity

Activity的创建方法

1. 创建一个Activity
用activity生命周期里一个重要方法——onCreate()实现如何创建一个Activity了。共四步:

  • step1:新建一个类,并继承AppCompatActivity类或Activity类。与Activity类不同的是,AppCompatActivity默认带标题栏,在v7包,且Android studio的工程也是默认继承AppcompatActivity类。
  • step2:重写方法onCreate()。
  • step3:用setContentView()方法设置在该Activity上显示的布局文件。
  • step4:最后一定要在AndroidManifest配置文件声明该Activity, 如果是主活动需要加上 intent-filter标签。

2. 页面跳转的实现
(1)无结果的页面跳转
从一个页面跳转到另一个页面,然后再跳转回去时没有数据要带回,这种情况下直接使用Intent(意图)类就可以简单的实现。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*无返回结果页面跳转
        * 1. 初始化一个Intent对象,参数(上下文对象.this,目标文件.class)
        * 2. 用startActivity方法执行意图,参数是一个Intent对象
        */
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivity(intent);
    }

(2)有结果的页面跳转
测试:从MainActivity跳转到SecondActivity,处理一些事务,然后返回MainActivity时,带回一些数据。

  • MainActivity页面
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* 有返回结果的页面跳转(MainActivity页面)
        * 1. 在MainActivity页面初始化一个Intent对象,参数(上下文对象.this,目标文件.class)
        * 2. 用startActivityForResult方法执行意图,参数(Intent对象,MainActivity的int型标志)
        * 3. 重载onActivityResult方法接收回传数据,使用intent.getExtra()方法获得
        * */
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivityForResult(intent,1);
    }

    //参数(请求Activity的标志:1,返回结果Activity的标志:2,intent对象)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1 && resultCode == 2){
            assert data != null;
            String data_result = data.getStringExtra("key");
        }
    }
  • SecondActivity页面
    private String data = "hello world";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* 有返回结果的页面跳转(SecondActivity页面)
         * 1. 在MainActivity页面初始化一个无参Intent对象
         * 2. 使用intent.putExtra方法存储数据,参数(key,value)
         * 3. 使用setResult方法回传数据,参数(SecondActivity的int型标志,intent对象)
         * 4. 调用finish()结束当前Activity的进程
         * */
        Intent intent = new Intent();
        intent.putExtra("key",data);
        setResult(2,intent);
        finish();
    }

Activity启动的另一种方式:匿名启动

如下所示,在Manifest.xml文件中,我们可以在中插入b并添加属性android:name,这样别的Activity就可以通过这个名字来start此Activity,而不是通过Activity真实的类名(在调用其他App的界面时会使用到,自己的App内部没必要用这种方式)。

        
            
                 //这里可以为此Activity生成自定义的名字
				//category指定Activity启动的环境
                 
            
        

//调用方式:
		Intent intent = new Intent();
		intent.setAction("jieko");
		startActivity(intent);

还可以通过上面的“调用方法”调用一些系统内置的一些应用,比如浏览器、图库、相机、短信、电话等等。示例如下:

		//调用浏览器
		Intent intent = new Intent();
		intent.setAction(Intent.ACTION_VIEW); //Intent中内置有一些常量,用来调用系统app
		Uri uri = Uri.parse("...");
		intent.setData(uri);
		startActivity(intent);

额外的小东西

随时随地退出整个程序

用户在使用一个App时,可能会在很多页面都有直接退出程序的想法,但是按back会一直回退,不方便,按Home键只是把程序挂起, 并没有退出程序。这时候你可以写一个专门的集合类对所有的活动进行管理(包括添加、移除和全部移除)。如下:

public class ActivityCollector {
	public static List activities = new ArrayList<>();
	public static void addActivity(Activity activity) {
		activities.add(activity);
	} 
	public static void removeActivity(Activity activity) {
		activities.remove(activity);
	} 
	public static void finishAll() {
		for (Activity activity : activities) {
			if (!activity.isFinishing()) {
				activity.finish();
			}
		}
		activities.clear();
	}
}

代码很容易理解,现在为你的每个Activity的onCreate()方法都加上ActivityCollector.addActivity(this)然后给每个Activity的onDestory()方法都加上ActivityCollector.removeActivity(this)最后在想要添加“一键退出”的功能的地方加上ActivityCollector.finishAll()即可。

当然你还可以在销毁所有活动的代码后面再加上杀掉当前进程的代码, 以保证程序完全退出,杀掉进程的代码如下所示:android.os.Process.killProcess(android.os.Process.myPid());

你可能感兴趣的:(Android入门——四大组件之Activity)