1).活动:四大应用组件之一
2).作用:提供能让用户操作并与之交互的界面
3).组件的特点:
1,它的类必须实现特定的接口或继承特定类
2,需要在配置文件中配置其全类名
3,他的对象不是通过new出来的而是系统自动创建的
4,他的对象具有一定的生命周期,他的类中有对应的生命周期回调方法
4).那些地方用到反射(Android):
a.配置文本中配置全类名
b.布局文件中
c.显示意图Intent(Context context,Class c)
2.Intent的理解:
1).意图:信使(Activity,Service,BroadcastReceiver三个组件间通信的信使);
2).分类:
a.显示:操作当前应用自己的组件
b.隐士:操作其他应用自己的组件
3.Intent的使用:
1).创建:
a.显示:Intent(Context context, Class activityClass)
b.隐士:Intent(String action)//与Activity与<intent-filter>的action匹配
2).携带数据
a.额外:putExtra(String key,Xxx value)内部用map容器保存
b.有特定前缀:setData(Uri data)//tel:1234,smsto:1234
3).读取数据
a.额外:Xxx getXxxExtra(String key)
b.有特定前缀:Uri getData()
4.Activity的使用:
1).定义:
a.定义一个类extends Activity,并重写生命周期方法
b.在功能清单文件中使用<activity>注册
2).启动
a.一般启动:startActivity(Intent)
b.带回调的启动:startActivityForResoult(Intent intent intrequestCode),重写:onActivityResult(int requestCode,int resultCode, Intent data)
3).结束
a.一般:finish();
b.带结果的:setResult(int resultCode ,Intent data)
5.Activity的生命周期
1).Activity界面的状态
a.运行状态:可见也可操作
b.暂停状态:可见但不可操作
c.停止状态:不可见但对象存在
d.死亡状态: 对象不存在
6.具体实例:
Activity1:
linnerlayout:
1 输入框EditText
没输入数据之前有灰色的提示;
2 button1 一般启动
3 button2 带回调的启动
实现Activity的功能
1.定义所有要操作的视图对象并初始化
2.给视图设置监听
3.在回调方法中实现逻辑
Activity2:
linnerlayout:
1 输入框EditText
2 button 一般返回
3 button 带结果的启动
实现一般启动
1,定义好第二个界面
1,布局
2,定义Activity
3,配置
4,重写onCreate方法并加载布局
2,启动界面2
1firstActivity:
1,创建Intent对象(显式)
2, 通过Intent携带额外数据
3,启动Activity
SecondActivity:
4,得到Intent对象
5,通过INTENT对象读取额外数据
6,显示到EdiText
实现一般返回:
SecondActivity:
1,在显示第二个页面的时候,第一个页面其实还在只是被覆盖掉而已
2,设置监听,关闭当前页面;在布局设置监听Activity里面重写方法,finish()当前页面;
实现带回调的启动:
1,与一般启动一样,不同之处在于startActivityForResult();
1,设置一个请求码
2,要用到回调方法onActivityResult(),并重写这个方法;
1,先判断
1,得到结果
2,显示结果
实现带结果的返回:
1,在布局里设置监听,讲监听方法写出来
2,从文本编辑框中保存数据
1,setResult((int)resultCode,(intent)data);
2, 设置一个结果码
3,new一个Intent对象作为结果的载体
4,得到数据
5,传送数据
3,关闭当前界面
FirstActivity:
@Override
public void onClick(View v) {
if(v == bt_main_01){
// Toast.makeText(this,"一般启动",0).show();
// 1,创建Intent对象(显式)
Intent intent = newIntent(this,SecondActivity.class);
// 2, 通过Intent携带额外数据
String message = et_main.getText().toString();
intent.putExtra("MESSAGE",message);
// 3,启动Activity
startActivity(intent);
}else if(v == bt_main_02) {
// Toast.makeText(this,"带回调的启动",0).show();
// 1,创建Intent对象(显式)
Intent intent = newIntent(this,SecondActivity.class);
// 2, 通过Intent携带额外数据
String message = et_main.getText().toString();
intent.putExtra("MESSAGE",message);
int requestCode = 2;
// 3,启动Activity,带回调的启动
startActivityForResult(intent,requestCode);
}
}
@Override
protected void onActivityResult(intrequestCode, int resultCode, Intent data) {
//判断
if(requestCode== 2 && resultCode == 3){
//取出数据
String result = data.getStringExtra("RESULT");
//显示出来
et_main.setText(result);
}
}
SecondActivity:
// 4,得到Intent对象
Intent intent =getIntent();
// 5,通过INTENT对象读取额外数据
String message =intent.getStringExtra("MESSAGE");
// 6,显示到EdiText
et_second.setText(message);
}
public void back1(View v){ //有没有参数是不一样的,如果没有参数的话会半崩溃
finish();
}
public void back2(View v){
//保存结果
int resultCode =3;
Intent data = new Intent();
String result =et_second.getText().toString();
data.putExtra("RESULT",result);
setResult(resultCode , data);
finish();
}