Activity解析
Activity相当于设备上的一个屏幕,在屏幕上添加不同的组件并且进行配置,从而呈现不同的功能
Activity四种状态
- 运行状态:Activity处于运行状态
- 暂停状态:程序处于准备退出状态,如上弹出是否退出的丢画框
- 停止状态:在暂停状态下点击确定退出,那么就进入停止状态
- 销毁状态:后台强制停止进程
ACtivity生命周期
- 加载Activity会从OnCreate方法自动运行到OnResume方法,最后运行状态显示布局
- 点击手机的退出按钮,首先触发OnPause方法 →OnStop方法→OnDestroy方法
创建启动、启动和关闭Activity
创建Activity
步骤
Android Studio快捷创建空的Activity
文件解析
1、MainActivity2.java文件
2、activity_main2.xml文件
3、上述配置好了还需要在AndroidManifest.xml文件中进行进行配置
.MainActivity2表示同一个包下,如下表示在com.example.study2这个包下,如果在com.example.study2的子包下,那么还得在前边加子包名
以上都是Android Studio提供的自动创建的功能所创建的文件,手动创建也是需要具备上述的所有条件
启动和关闭Activity
两种Activity
入口Activity:需要在在AndroidManifest.xml文件中进行进行配置,如下intent-filter标签内添加如下内容
启动Activity
其他Activity:相当于除了主页以外的页面,可以通过startActivity进行启动Activity
/**
* 第一个参数是上下文对象,可以是跳转页面前的Activity对象
*/
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
/**
* 启动Activity
*/
startActivity(intent);
关闭Activity
关闭Activity只需要在Activity中调用finish();方法即可
如果关闭的Activity是从其他页面跳转过来的,那么就会跳转回去,如果关闭的是主Activity,那么就会跳转到主屏幕
Activity之间的数据交换
使用Bundle进行数据交换
Bundle相当于一个HashMap,存在key-value对,通过key进行查找对应的value
交换数据步骤
1、putXXX:是根据传递不同的数据进行设置的,如下为传递字符串
/**
* 第一个参数是当前所处的Activity的参数
* 第二个参数是要跳转的Activity
*/
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
Bundle bundle = new Bundle();
// 放入数据
bundle.putCharSequence("name", nameText);
bundle.putCharSequence("phone", phoneText);
// 填充到Intent中
intent.putExtras(bundle);
// 进行跳转Activity
startActivity(intent);
2、在跳转到的页面中通过一下进行获取数据
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String name = bundle.getString("name");
String phone = bundle.getString("phone");
调用另一个Activity并获取返回结果
1、实例应用场景如下:选择头像以后返回到原来页面就显示选中的头像
2、实现如上需求,在MainActivity.class中启动Acitivity的时候使用startActivityForResult方法并监听跳转的页面的返回值
package com.example.study2;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
// 监听返回值
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 0x11 && resultCode == 0x11){
Bundle bundle = data.getExtras();
int imgId = bundle.getInt("imgId");
ImageView tx = findViewById(R.id.tx);
tx.setImageResource(imgId);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnSelect = findViewById(R.id.select);
// 头像选择按钮触发事件
btnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
/**
* 第一个参数是跳转相关的intent对象
* 第二个参数是标识,自定义设置
*/
startActivityForResult(intent, 0x11);
}
});
}
}
3、在MainActivity2.class处理选择头像后的逻辑并返回结果
package com.example.study2;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity2 extends AppCompatActivity {
int[] imgs = new int[]{R.drawable.t1, R.drawable.t2};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
GridView listImgs = findViewById(R.id.listImgs);
listImgs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = getIntent();
Bundle bundle = new Bundle();
bundle.putInt("imgId", imgs[i]);
intent.putExtras(bundle);
setResult(0x11,intent);
finish();
}
});
listImgs.setAdapter(new myAdapter(MainActivity2.this));
}
public class myAdapter extends BaseAdapter{
Context myContext;
public myAdapter(Context c){
myContext = c ;
}
@Override
public int getCount() {
return imgs.length;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView imageView = null;
if(view == null){
imageView = new ImageView(myContext);
imageView.setLayoutParams(new GridView.LayoutParams(100,100));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
}else{
imageView = (ImageView) view;
}
imageView.setImageResource(imgs[i]);
return imageView;
}
}
}
4、activity_main.xml:配置显示头像按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:id="@+id/tx"
android:layout_width="match_parent"
android:layout_height="400dp"
></ImageView>
<Button
android:id="@+id/select"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="选择头像"
></Button>
</LinearLayout>
5、在activity_main2.xml:显示头像列表
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2">
<GridView
android:numColumns="3"
android:id="@+id/listImgs"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</GridView>
</LinearLayout>