第二章 Activity

第二章 Activity

1.Android Activity 生命周期

什么是Activity?

  • 从视觉效果来看:是一个活动窗口,是应用程序绘制的一个图形界面,用于响应本窗口中的所有的事件--》JSP/HTML
  • 从应用程序来看,一个Activity就是一个单独的屏幕,相当于是安卓程序和用户交互的一个桥梁.-->XML+JAVA--->html/jsp+JS
  • 从外部看,Activity 就是一个图形界面,通俗点说就是在android 的应用中所看到的用户界面都是一个Activity或者说是Activity的表现
  • 从内部来看,Activity就是view 的容器,负责把放在其中的组件按照一定的组织进行表现和处理。 对于程序员来说,Activity就是一个java类一个入口,我们在里面编写相关的实现代码 XML+JAVA

Activity的状态

1.running:激活状态
*Activity在屏幕显示
*可以进行交互
2.Paused:暂停状态
*Activity不能进行交互,暂时把屏幕显示给其他的Activity
*例如:手机锁屏了,这个Activity就被暂停了
3.Stop:停止状态
*进入后台不运行
*例如:按了home键,应用进入了后台不运行
4.Destory:销毁状态
*应用被杀死了
*情况:用户杀掉;Android系统自动杀死(设计到了进程的优先级问题);

在这里插入图片描述

官方解释:

①Running:活跃的状态,即在onResume()以后Activity处于前台可视化,整个Activity最顶层的状态,可以和用户直接进行交流;
②Pause:暂停的状态,当一个Activity被另一个新的非全屏的或者透明的Activity覆盖时候,此时该Activity是去焦点,暂时失去了和用户交流的能力,但是其状态、变量等都还保留着。
③Stop:结束的状态,当一个Activity被另一个全屏的非透明Activity完全覆盖时候的状态,此时该Activity已经不可见了,但是状态还保留着。
④Destoryed:销毁的状态,当一个Activity被系统回收或者人为关闭后的状态,此时Activity已经关闭。

Android:XML+JAVA 类似于web开发里面:HTML+JS

Activity的状态的转换

在这里插入图片描述

2.Android Log使用

log是什么?

进行日志处理的一个专门的类,日志的处理便于开发者调试和维护。

在程序中输出日志, 使用 android.util.Log 类.
该类提供了若干静态方法

android.util.Log
1.Log.v(String tag, String msg); 黑色 任意的信息都会输出
2.Log.d(String tag, String msg); dubug 断点
3.Log.i(String tag, String msg); 绿色 提示信息
4.Log.w(String tag, String msg); 橙色 警告信息
5.Log.e(String tag, String msg); 红色 错误信息

分别对应 Verbose(冗长), Debug, Info, Warning,Error.

tag是一个标识,可以是任意字符串,通常可以使用类名+方法名, 主要是用来在查看日志时提供一个筛选条件.
在这里插入图片描述

在MainActivity.java文件中写入onStart(),onResume(),onStop()方法,并且写一段

Log.v(“mainActivity”, “执行onResume方法”);

代码,这个时候可以在logcat框中看到日志记录.如果太多了日志记录,可以创建一个过滤器,过滤器的包名应该与应用的包名一致.
在这里插入图片描述

3.Android EditText常规操作

1)EditText,TextView,Button之间的关系

EditText输入框,TextView文本信息,Button按钮
在这里插入图片描述

2)EditText的相关属性

activity的属性在activity_mian.aml文件中设置,Outline面板中可以设置属性

TextView的基本属性:有Id,Layout Parameters,Text,Hint,Input Type,Content Description,TextView(因为EditText继承了TextView),View(View),Deprecated.子类继承父类的属性,+特殊的属性.
在这里插入图片描述

Id是命名,注意不能有重复
在这里插入图片描述

Layout Parameter(布局)中,的width和height有wrap_content(跟内容相同,内容有多大就有多大),fill_parent(填充内容),match_parent(跟父属性相同)三个属性.
在这里插入图片描述

Text是内容.
在这里插入图片描述

Hint是提示信息.
在这里插入图片描述

Input Type是输入内容的值的类型,即输入框中弹出的键盘类型.
在这里插入图片描述

4大部分属性:
*自己的属性
*继承来的
*layout parameter
*Drepcate--废弃的属性

4)常用操作:

  • 获取对象
  • 设置值
  • 获取值

在MainActivit.java文件的onstart()方法中编写以下代码,获取对象,设置值,获取值:

  // 获取对象
  // 所有开发的组件的id,都是在R类里面
  // R.id.xxx
  EditText username = (EditText) findViewById(R.id.main_username);
  EditText password = (EditText) findViewById(R.id.main_password);
  // 设置值
  username.setText("用户名");
  password.setText("123456");
  // 获取值
  	String passwordStr = password.getText().toString();
  	String usernameStr = username.getText().toString();
  
  	Log.v("mainActivity", "passwordStr的值为" + passwordStr + "usernameStr的值为:" + usernameStr);

则在应用的编辑栏中会显示我在代码中编写password和username,在日志文件中也会显示
在这里插入图片描述

4.Android点击事件实现的逻辑

三种方式:

1)在属性里面直接配置onclick属性-指定方法

给登入按钮绑定了Login的方法,然后再在MainActivity.java中创建一个login方法
在这里插入图片描述

login方法:

/*
1.把方法的修饰改成public
2.方法的参数一定要放一个View对象
*/
public void login(View v) {
// 获取对象
// 所有开发的组件的id,都是在R类里面
// R.id.xxx
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 设置值
username.setText(“用户名”);
password.setText(“123456”);
// 获取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
}

2)给按钮绑定事件

在onCreate方法中给按钮loginB绑定一个View.onClickListener的匿名内部类,并且创建一个onClick()方法.

// 所有Activity第一个执行的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 写一段日志执行
Log.v(“mainActivity”, “执行oncreate方法”);
Button loginB = (Button) findViewById(R.id.button);
// 给按钮绑定一个点击事件
loginB.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// R.id.xxx
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 设置值
username.setText(“用户名”);
password.setText(“123456”);
// 获取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
}
});

}

3)activity实现事件的接口

第一步:实现OnClickListener接口,就会产生一个onclick()方法

public class MainActivity extends Activity implements OnClickListener

第二步:在oncreate中为按钮绑定鼠标点击事件

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 写一段日志执行
Log.v(“mainActivity”, “执行oncreate方法”);
//获取button按钮控件
Button loginButton = (Button) findViewById(R.id.button);
//为按钮绑定一个点击事件
loginButton.setOnClickListener(MainActivity.this);
}

第三步:编写onclick方法,如果鼠标点击了按钮,则会执行onclick中的方法

  @Override
  public void onClick(View v) {
  }

但是实现了一个OnclickListener接口,只会生成一个onclick方法,如果有多个button按钮的时候怎么办呢?

如果有多个按钮需要绑定事件的时候,根据按钮的id识别是哪个按钮,然后再给他绑定相应的事件

代码如下:

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
Log.v(“mainActivity”,“进入监听事件-自己”);
//获取编辑框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
//给编辑框设置值
username.setText(“用户名”);
password.setText(“123456”);
// 获取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
break;
default:
break;
}

5.Android 传值方式

登入界面–>点击登入按钮–>跳转到主页面,在主页面显示用户名,密码.

步骤:

1.登入界面–已经有了

2.主页面

3.登录页面点击的时候,获取输入的用户名,密码,传值给主页面

4.主页面获取登入页面传入的值.

开发主页面步骤:

1)创建一个activity.mxl
在这里插入图片描述

设置activity名字,首字母必须大写
在这里插入图片描述

2)设置home页面的相关属性
在这里插入图片描述

传值方式有以下四种:

(1)intent传值

使用intent传值在传递方一共要3步

  1. 创建意图
  2. 向意图中存入要传递的值
  3. 启动意图
**在MainActivity中写以下代码:**

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
Log.v(“mainActivity”,“进入监听事件-自己”);
//获取编辑框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
//给编辑框设置值
username.setText(“用户名”);
password.setText(“123456”);
// 获取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
//使用Intent传递值
//1.创建一个Intent,要指定class,第一个是我当前的位置,第二个是我要跳转的位置.
Intent intent=new Intent(MainActivity.this,HomeActivity.class);
//2.存储值进intent
intent.putExtra(“username”, usernameStr);
intent.putExtra(“password”, passwordStr);
//3.启动意图
startActivity(intent);

​ break;
default:
​ break;
}

}

接收方需要4步:

  1. 创建意图,并获取意图
  2. 获取意图中的值
  3. 获取控件
  4. 给控件设置你需要的值

在HomeActivity的onCreate中写以下代码:

//1.创建意图,并且获取意图
Intent intent=getIntent();
//2.获取意图中的值
String username=intent.getStringExtra(“username”);
String password=intent.getStringExtra(“password”);
//3.获取Home界面中的TextView控件
TextView name=(TextView) findViewById(R.id.home_username);
TextView pass=(TextView) findViewById(R.id.home_password);
//4.将获取的值设置给TextView控件
name.setText(username);
pass.setText(password);

运行项目
在这里插入图片描述

(2)bundle传值

bundel其实就是基于意图的,使用bundle的方法就是将数据放到bundle中,然后再将bundle放到intent中

基本思路
在这里插入图片描述

MainActivity其他代码不变,onClick(v)修改后代码如下:

public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
//如果点击的按钮的id为button,则执行以下事件
Log.v(“mainActivity”, “进入监听事件-自己”);
// 获取编辑框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 给编辑框设置值
username.setText(“用户名”);
password.setText(“123456”);
// 获取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
// 使用bundle传递值
// 1.创建一个Intent,要指定class,第一个是我当前的位置,第二个是我要跳转的位置.
Intent intent = new Intent(MainActivity.this, HomeActivity.class);

​ //2.创建一个bundle
​ Bundle bundle=new Bundle();
​ //3.将所有的信息放到bundle中
​ bundle.putString(“username”, usernameStr);
​ bundle.putString(“password”, passwordStr);
​ //4.bundle是基于意图的,将bundle放到意图中
​ intent.putExtras(bundle);
​ //5.启动意图
​ startActivity(intent);

​ break;

​ default:
​ break;
​ }

}

HomeActivity中其他的代码,onCreate方法中将之前用intent获取值改为用bundle获取值

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//1.创建意图,并且获取意图
Intent intent=getIntent();
//2.获取bundle对象
Bundle Extras=intent.getExtras();
//3.获取意图中的值
String username=Extras.getString(“username”);
String password=Extras.getString(“password”);
//3.获取Home界面中的TextView对象
TextView name=(TextView) findViewById(R.id.home_username);
TextView pass=(TextView) findViewById(R.id.home_password);
//4.将获取的值设置给TextView控件
name.setText(username);
pass.setText(password);

}

运行结果一致!

(3)application传值

**含义:**应用.

在web开发中把信息放到Application中,就是全局都可以获取值.

**原理:**Activity向application里面放入值.其他的任意的activity都可以获取当前的application,从application里面就可以取到放在里面值.

应用场景:

1)相同的数据,很多的activity需要

2)一个数据需要从一个activity传到另外一个,另外一个传给第二个.
在这里插入图片描述

开发步骤:

第一步 :建立MyApplication 类 继承Application ,建立私有属性,建立getter setter 方法,*在清单文件中进行注册,在Application标签对中添加name属性,属性值为 创建Application的包名加类名。*

1)创建Application类:
在这里插入图片描述

2)建立私有属性:

public class MyApplication extends Application {
//用户名
private String username;
//密码
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

3)在清单文件中注册:
在这里插入图片描述

**第二步:**MyApplication application= (MyApplication) getApplication(); //在主页面中接收application,对application的属性进行赋值。 application.setNum1();

在MainActivity中的onclick方法中,将信息存入Application中

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
//如果点击的按钮的id为button,则执行以下事件
Log.v(“mainActivity”, “进入监听事件-自己”);
// 获取编辑框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 给编辑框设置值
username.setText(“用户名”);
password.setText(“123456”);
// 获取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
//1.创建一个Intent,要指定class,第一个是我当前的位置,第二个是我要跳转的位置.
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
//2.创建一个Application对象
MyApplication myApplication=(MyApplication) getApplication();
//3.将信息存入Application中
myApplication.setUsername(usernameStr);
myApplication.setPassword(passwordStr);
break;
default:
break;
}
}

**第三步:**在onclick方法中创建意图对象Intent ,启动意图对象所对应的页面

Intent intent=new Intent(MainActivity.this,ResultActivity.class);

startActivity(intent);

第四步: 在接收页面获取application对象 然后取值之后展示到在相应的显示控件当中

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//1.创建意图,并且获取意图
Intent intent=getIntent();
//2.获取意图中的值
//String username=intent.getStringExtra(“username”);
//String password=intent.getStringExtra(“password”);

//获取当前的应用
MyApplication myApplication=(MyApplication) getApplication();
//获取Application中的值
String username=myApplication.getUsername();
String password=myApplication.getPassword();
//3.获取Home界面中的TextView对象
TextView name=(TextView) findViewById(R.id.home_username);
TextView pass=(TextView) findViewById(R.id.home_password);
//4.将获取的值设置给TextView控件
name.setText(username);
pass.setText(password);

}

运行结果与意图传值一致!

(4)数据回传

数据回传逻辑:
在这里插入图片描述

代码:

在MainActivity中的onclick中写入以下代码:

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
//如果点击的按钮的id为button,则执行以下事件
Log.v(“mainActivity”, “进入监听事件-自己”);
// 获取编辑框
EditText username = (EditText) findViewById(R.id.main_username);
EditText password = (EditText) findViewById(R.id.main_password);
// 给编辑框设置值
username.setText(“用户名”);
password.setText(“123456”);
// 获取值
String passwordStr = password.getText().toString();
String usernameStr = username.getText().toString();
// 使用Intent传递值
// 1.创建一个Intent,要指定class,第一个是我当前的位置,第二个是我要跳转的位置.
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
//5.启动意图
//startActivity(intent);
/* requestCode:类型Int*/
startActivityForResult(intent, 1);

break;

default:
break;
}

}

然后再在里面写入一个onActivityResult()方法获取回传的数据:

/*activity传值回调方法

1.取activity返回的数据

2.取值之前要判断一下请求码和结果码
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(“mainActivity_onActivityResult”,“进入回调方法”);
super.onActivityResult(requestCode, resultCode, data);
if(requestCode1&&resultCode2) {
String returnData=data.getStringExtra(“returnData”);
Log.d(“mainActivity_onActivityResult”,returnData);
Log.v(“mainActivity”, returnData);
}
}

在homeActivity中的onCreate方法中写一个鼠标点击事件用于返回数据:

/*给按钮添加事件

方式2:直接给按钮对象绑定事件监听器

获取按钮对象

绑定监听器
/
//获取对象
Button button=(Button) findViewById(R.id.home_button);
/
绑定监听事件 /
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/
返回数据给MainActivity /
//获取意图
Intent intent2=getIntent();
//放返回数据
intent2.putExtra(“returnData”, “这是我回传的数据”);
/
resultCode:是开发人员自己定义的intent返回标识码

数据类型:int*/
setResult(2,intent2);
HomeActivity.this.finish();
}
});

最终页面就会跳转到Mainactivity页面,并获取数据

g.v(“mainActivity”, returnData);
}
}

在homeActivity中的onCreate方法中写一个鼠标点击事件用于返回数据:

/*给按钮添加事件

方式2:直接给按钮对象绑定事件监听器

获取按钮对象

绑定监听器
/
//获取对象
Button button=(Button) findViewById(R.id.home_button);
/
绑定监听事件 /
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/
返回数据给MainActivity /
//获取意图
Intent intent2=getIntent();
//放返回数据
intent2.putExtra(“returnData”, “这是我回传的数据”);
/
resultCode:是开发人员自己定义的intent返回标识码

数据类型:int*/
setResult(2,intent2);
HomeActivity.this.finish();
}
});

最终页面就会跳转到Mainactivity页面,并获取数据

这就是Android第二章的课程笔记,如果你觉得写的不错记得关注我哦!你们的支持就是我不断创作的源泉

发布了31 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_35653657/article/details/104757438