安卓四大组件都是非常重要的知识,今天来说Activity
。老规矩,用一张图来介绍今天的内容。
图片看不清的话可以右键新窗口打开
Activity 是 Android 四大组件之一,它用于展示界面。
Activity 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。
Activity 中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过 setContentView(View)来显示指定控件。
在一个 android 应用中,一个 Activity 通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
Activity 之间通过 Intent 进行通信
标签中如果带有这个子节点,则会在系统中多创建一个快捷图标
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
一个应用程序可以在桌面创建多个快捷图标。
activity的名称、图标可以和应用程序的名称、图标不相同
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
Activity的跳转需要创建Intent对象,通过设置intent对象的参数指定要跳转Activity
通过设置Activity的包名和类名实现跳转,称为显式意图
通过指定动作实现跳转,称为隐式意图
1,显式意图
- 跳转至同一项目下的另一个Activity,直接指定该Activity的字节码即可
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
startActivity(intent);
跳转至其他应用中的Activity,需要指定该应用的包名和该Activity的类名
Intent intent = new Intent();
//启动系统自带的拨号器应用
intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
startActivity(intent);
隐式意图跳转至指定Activity
Intent intent = new Intent();
//启动系统自带的拨号器应用
intent.setAction(Intent.ACTION_DIAL);
startActivity(intent);
要让一个Activity可以被隐式启动,需要在清单文件的activity节点中设置intent-filter子节点
<intent-filter >
<action android:name="com.itheima.second"/>
<data android:scheme="asd" android:mimeType="aa/bb"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
隐式意图启动Activity,需要为intent设置以上三个属性,且值必须与该Activity在清单文件中对三个属性的定义匹配
intent-filter节点及其子节点都可以同时定义多个,隐式启动时只需与任意一个匹配即可
//获取启动此Activity的intent对象
Intent intent = getIntent();
Uri uri = intent.getData();
显式意图用于启动同一应用中的Activity
隐式意图用于启动不同应用中的Activity
Activity通过Intent启动时,可以通过Intent对象携带数据到目标Activity
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("maleName", maleName);
intent.putExtra("femaleName", femaleName);
startActivity(intent);
在目标Activity中取出数据
Intent intent = getIntent();
String maleName = intent.getStringExtra("maleName");
String femaleName = intent.getStringExtra("femaleName");
onCreate-->onStart-->onResume-->onPause-->onStop-->onDestory
onStart-->onResume-->onPause-->onStop
onResume-->onPause
每个应用会有一个Activity任务栈,存放已启动的Activity
Activity的启动模式,修改任务栈的排列情况
singeTask 单一任务栈,在当前任务栈里面只能有一个实例存在
singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在
默认情况下 ,横竖屏切换, 销毁当前的activity,重新创建一个新的activity
快捷键ctrl+F11
在一些特殊的应用程序常见下,比如游戏,不希望横竖屏切换activity被销毁重新创建 需求:禁用掉横竖屏切换的生命周期 1. 横竖屏写死 android:screenOrientation="landscape" android:screenOrientation="portrait"
让系统的环境 不再去敏感横竖屏的切换。
android:configChanges="orientation|screenSize|keyboardHidden"
步骤: 1. 开启activity并且获取返回值
startActivityForResult(intent, 0);
在新开启的界面里面实现设置数据的逻辑
Intent data = new Intent();
data.putExtra("phone", phone);
//设置一个结果数据,数据会返回给调用者
setResult(0, data);
finish();//关闭掉当前的activity,才会返回数据
在开启者activity里面实现方法 onActivityResult(int requestCode, int resultCode, Intent data) 通过data获取返回的数据
根据请求码和结果码确定业务逻辑
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ EditText et_malename = (EditText) findViewById(R.id.et_malename); EditText et_femalename = (EditText) findViewById(R.id.et_femalename); String maleName = et_malename.getText().toString(); String femaleName = et_femalename.getText().toString(); Intent intent = new Intent(this, SecondActivity.class); //把数据封装至intent中 // intent.putExtra("maleName", maleName); // intent.putExtra("femaleName", femaleName); //把数据封装至bundle中 Bundle bundle = new Bundle(); bundle.putString("maleName", maleName); bundle.putString("femaleName", femaleName); //把bundle封装至intent中 intent.putExtras(bundle); startActivity(intent); } }
public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //指定Activity显示哪一个布局文件 setContentView(R.layout.activity_second); Intent intent = getIntent(); // String maleName = intent.getStringExtra("maleName"); // String femaleName = intent.getStringExtra("femaleName"); Bundle bundle = intent.getExtras(); String maleName = bundle.getString("maleName"); String femaleName = (String) bundle.get("femaleName"); Random rd = new Random(); int yinyuan = rd.nextInt(11) + 90; ((TextView)findViewById(R.id.tv)).setText(maleName + "与" + femaleName + "的缘分为" + yinyuan + ",实乃天作之合"); } }
安卓笔记五--四大组件之Activity(页面跳转,不同窗体传递数据)
原文地址:http://blog.csdn.net/jinfulin/article/details/45156395