起步,关于Android的活动activity

很多时候看书都是容易看了又忘,除非你记下来,并且经常去使用它。有些时候学些东西,刚开始不是非要理解透,有时候用着用着,学着学着就明白了,当然每次什么你都能理解明白就能更快的学会它。——题记

这是我学习Android写的第一篇博客,我先从我看的书开始写起,温故而知新,也顺便复习下自己不熟悉的部分。

首先要介绍的是:activity(活动)

毕竟这是Android离不开的东西。


新建Android application project,一路next就会建好一个新的Android项目,然后看到默认提供给我们的代码

public class MainActivity extends Activity {

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

可以看到,我们创建的MainActivity继承自activity,然后有个oncreate方法,基本上所有视图的创建都会调用oncreate()方法,这和Android的生命周期有关,Android的生命周期图如下

Android程序运行时不同状态都会执行对应的方法,由图可知当活动创建时为了能执行一些操作让用户看到一些东西,就得在oncreate方法中初始化一些必要的数据,所以才有接下来的setContentView()方法,该方法通过布局文件的id查找到布局,然后给我们的页面设置好UI.(小提示:有时候使用R时会报错,这时候你看一下导入的R的包是否正确,一般我们自己写的xml布局文件,需要导入自己的包下的R文件)。


在创建了不止一个activity的时候,在不同activity活动中跳转需要使用到intent(意图),告诉系统你要打开的是那个activity,这样系统才能找到你要打开的activity,intent好比一个搜索引擎,你给他关键字,他就把符合关键字的内容提供给你。

当创建第二个activity的时候,我们就需要在清单文件中注册我们的activity了,意义在于告诉系统我现在新加了一个活动,现在系统里有两个活动啦,如果你不注册,那程序运行程序就会报错,说你的activity没有注册,大概你可以这样理解,就好比你在很多网站没注册就无法做事情一样。

非主活动注册方式如下:

        <activity android:name="com.onion.test.Two"></activity>

主活动还需要加上intent-filter,来配置这个活动是程序的入口。

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

注册好了activity就可以在不同活动间进行跳转了,intent可以用两种方式来指定你要跳转的activity,一种是显示intent,另一种是隐式intent。

先来说显示intent,很简单,就是指定好要打开的activity然后调用startActivity(intent)方法就可以了,另一种方式需要在清单文件中配置activity的action和caregory值,然后通过action的值来打开。示例如下:

显示intent:

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button but = (Button) findViewById(R.id.button1);
		but.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(MainActivity.this,TwoActivity.class);
				startActivity(intent);
			}
		});
	}

隐式intent:

<span style="white-space:pre">	</span><activity
            android:name=".TwoActivity"
            android:label="@string/app_name" >
            <intent-filter >
                <action android:name="onion"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
<span style="white-space:pre">	</span></activity>

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button but = (Button) findViewById(R.id.button1);
		but.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent("onion");
				startActivity(intent);
			}
		});
	}

当然intent还有更多用法,以后再写。

实现activity的跳转后,接下来实现数据的传递,同样很简单,使用intent.putExtra("name",data);的形式就可以了存储的方式是键值对的形式,都是通过name来找到data,在第二个activity里使用Intent intent = getIntent();的形式先获取intent,然后使用intent.get***Extra(“name”);(中间***为数据类型)就可以取出数据了。

获取返回的数据通过startActivityForResult(intent,code);来启动新的活动并获取返回值,其中code为请求码,要求为唯一值。然后在启动的活动中使用setResult(RESULT_OK,intent);返回数据,最后在返回的活动中重写onActivityResult()方法即可。onActivityResult()方法接收3个参数,分别是请求码、返回的处理结果(RESULT_OK)以及intent。


当设备横竖屏切换时,Activity会被重新创建,这个时候数据会丢失,可以通过bundle来存储丢失的数据,这部分以后写bundle的时候再介绍。


Activity的最后一部分,启动模式:standard、singleTop、singleTask、singleInstance都需要在清单文件中配置。

通过在Activity中设置android:launchMode="singleTop"来指定。

standard为默认模式,无需配置也是该模式。

singleTop为栈顶模式,就是当该活动处于最顶层的时候,不再创建新的该实例。(可以把活动理解为一个楼房,没新打开一个楼房就会在最顶层新加一层)

singleTask为单例模式,如果楼房中有你要找的楼层,就把他上面的楼层全部拆掉,让它显示在最上面,没有就在最上面创建它。

singleInstance,这种模式就相当于在旁边新建了一层楼专门存放这个活动。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值