活动activity
启动时的默认活动界面
在活动中编写了MainActivity后,需要再AndroidManifest.xnl文件中对其进行设置为启动后的默认活动进程,设置属性如下。
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
给活动加载一个布局文件:
setContentView(R.layout.main_layout);
设置点击侦听
Button bt1 = (Button) findViewById(R.id.button_1); bt1.setOnClickListener(new View.OnClickListener() { …… }
吐司的使用
Toast.makeText(MainActivity.this, "你好", Toast.LENGTH_SHORT).show();
为启动时界面添加菜单栏
销毁当前活动界面
- 返回按钮
- 使用finish()函数
显式启动另一个活动
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
隐式启动另一个活动
隐式启动本程序的活动
首先在AndroidManifest.xml文件中设置对应的action name
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="code.dage.com.a02_activity.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
上所示设置好对应的参数后,在对应的调用启动隐式活动的位置处,添加以下代码
Intent intent = new Intent("code.dage.com.a02_activity.ACTION_START"); startActivity(intent);
也可以使用category也对属性进行限定,必须category与action都匹配才能启动另一个活动
intent.addCategory("code.dage.com.aa"); <category android:name="code.dage.com.aa" />
另外这些category与action可以设置多个来进行匹配
使用隐式来启动其他程序的活动
启动网页
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
隐式启动有一个好处,可以在多个程序里面选择,比如打开浏览器的程序,可以出现多个应用来挑选而不是指定的应用。
<activity android:name=".ThirdActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> </intent-filter> </activity>
在上述代码对应的活动添加到程序后,也会响应前面启动网页的事件
活动之间数据传递
向下一个活动传递数据
发送
String date = “nice to meat you”;
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra(“date”, date);
startActivityForResult(intent, 1);接收
Intent intent = getIntent(); String date = intent.getStringExtra("date"); Toast.makeText(SecondActivity.this, date, Toast.LENGTH_SHORT).show();
向上一个活动返回数据
发送
bt2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("date", "xixi"); setResult(RESULT_OK, intent); finish(); } });
接收
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if(resultCode == RESULT_OK) { String date = data.getStringExtra("date"); Toast.makeText(MainActivity.this, date, Toast.LENGTH_SHORT).show(); } } }
其中,这个发送是点击了按钮事件后使用finish()来销毁当前活动回到上一个的活动界面,并且在按钮事件中添加了携带的数据,里面的:
setResult(RESULT_OK, intent);
为返回的处理结果,一般为RESULT_OK或RESULT_CANCELED。当然,intent.putExtra依旧是携带的数据。
在上一个进程中启动这个有返回信息的活动时使用的是:
startActivityForResult(intent, 1);
启动1表示的标识符
在上一个进程中重写了onActivityResult方法,这个方法有三个参数,分别表示刚刚传递过去的标识符,返回的处理结果,携带的数据等,先判断后处理。
还可以使用点击返回键来实现回到上一个活动界面,如果使用返回键,那么把刚刚在点击按钮事件的处理放置在重写返回键的方法中。
onBackPressed();
活动的生命周期
活动的启动模式
设置位置
<activity android:name=".MainActivity"
android:launchMode="singleTop"
>
standard
活动的默认启动模式,可以在当前活动的基础上,把当前活动压栈,新建一个当前活动进入栈顶。
singleTop
如果当前活动在栈顶,那么新建一个当前活动时不会把它压栈新建活动。而是直接使用该活动。
singleTask
只允许栈中最多只存在一个活动的实例,即便这个活动不在栈顶,在新建活动时也不会重新创建,而是直接使用该活动,并且,把栈中该活动以上的所有活动全部出栈。
singleInstance
该模式创建的活动单独占据一个返回栈,方便对这种单独的一个活动别的程序调用。
获得当前活动的类名
getClass().getSimpleName();
返回的是一个字符串形式的类名
如果查看某个工程文件,可以新建一个activity,这个activity没有具体的活动界面显示,在里面重写onCreate方法,在方法中把上述代码使用log之类的形式进行打印出来,然后让所有的activity继承这一个activity,那么在每个活动打开时都会打印对应类名的Log信息。
对调用当前活动所需的数据进行封装
在当前活动中编写如下代码
public static void actionStart(Context context, String date1, String date2) {
Intent intent = new Intent(context, ThirdActivity.class);
intent.putExtra("param1", date1);
intent.putExtra("param2", date2);
context.startActivity(intent);
}
那么在别的活动中启动当前活动时,只需要一行代码就可以完成对当前活动的启动与数据传递
ThirdActivity.actionStart(MainActivity.this, "Hello", "DaGe");