前言
基础知识点汇总
文章目录
一、Activity
1. 是什么
- 打开一个 APP 后所看到的各个界面,每个界面都是一个 Activity。
2. 作用
- APP 通过 Activity 来展示各个界面,处理和用户的交互;比如文本框输入内容、点击按钮触发事件、观看视频等。
3. 使用
-
1)新建 Activity
Activity Name
:类名称,命名为 功能 + Activity;例如:TestActivity
;Layout Name
:输入类名称后,会自动跟随输入的类名改变,Android Studio 建议的布局文件的名称和 Activity 的名称保持一致;方便直接在 res 目录下查看每个Activity对应的 layout 布局文件;
-
2)Java 目录下源程序
onCreate()
:程序从此处开始执行;setContentView()
:指定一个视图用来呈现内容;
-
3)启动另一个视图
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_layout); // 指定一个视图 } }
-
3)通过按钮绑定触发切换下一个 Activity
在布局文件(XML)里 id 设置好名字,在源程序中就可以直接访问到名字变量
新建一个 Activity,会自动在 Java 目录下自动创建一个 class (类文件)同时创建好一个 XML (布局文件),有对应关系;
// MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout); // 指定一个视图
// 根据 id 找到所创建的按钮,绑定点击事件
findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 启动一个Activity,startActivity(传入一个Intent实例) 通过Intent实例来配置要启动的目标Activity
startActivity(new Intent(MainActivity.this, AnotherAty.class));
}
});
}
}
// AnotherAty
public class AnotherAty extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another_aty);
}
}
二、Activity 生命
1、生命周期图
帮助文档
Activity启动 --> 执行 onCreate() --> onStart() --> onResume() -->(前面三个函数是在创建 Activity 过程中执行) Activity 运行 --> onPause() (暂停 Activity,可见 ) --> onStop(停止,Activity 处于不可见状态) --> 通过导航重新回到 Activity --> onRestart() --> onStart() --> onResume()
回到桌面
退出界面
切换回到界面
2、两个 Activity 跳转过程中生命周期
三、Activity 间传递数据
1、传递数据
1)传递简单数据
// MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout); // 指定一个视图
// 根据 id 找到所创建的按钮
findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// AnotherAty是通过Intent启动的
Intent i = new Intent(MainActivity.this, AnotherAty.class); // AnotherAty.class:要被启动Activity类的定义
// 传递参数
i.putExtra("data", "Hello Yjx!!!");
startActivity(i);
}
});
}
}
public class AnotherAty extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another_aty);
// AnotherAty是通过Intent启动的
// 获取MainActivity传来的数据,通过getIntent获取到与该Activity相关的Intent
Intent i = getIntent();
tv = findViewById(R.id.tv);
tv.setText(i.getStringExtra("data"));
}
}
2)传递数据包(Bundle)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout); // 指定一个视图
// 根据 id 找到所创建的按钮
findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// AnotherAty是通过Intent启动的
Intent i = new Intent(MainActivity.this, AnotherAty.class); // AnotherAty.class:要被启动Activity类的定义
Bundle b = new Bundle(); // 数据资源包:可以存入多种基本数据
b.putString("name", "Yjx");
b.putInt("age", 2);
i.putExtras(b);
startActivity(i);
}
});
}
}
public class AnotherAty extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another_aty);
// AnotherAty是通过Intent启动的
// 获取MainActivity传来的数据,通过getIntent获取到与该Activity相关的Intent
Intent i = getIntent();
// 先获取Bundle
Bundle data = i.getExtras();
tv = findViewById(R.id.tv);
tv.setText(String.format("name=%s, age=%d", data.getString("name"), data.getInt("age")));
}
}
3)传递值对象
// User类
public class User implements Serializable {
private String name;
private int age;
public User(String name, int age)
{
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout); // 指定一个视图
// 根据 id 找到所创建的按钮
findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// AnotherAty是通过Intent启动的
Intent i = new Intent(MainActivity.this, AnotherAty.class);
// 传数据
i.putExtra("user", new User("Yjx", 26));
}
});
}
}
// anotherAty
public class AnotherAty extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another_aty);
// AnotherAty是通过Intent启动的
// 获取MainActivity传来的数据,通过getIntent获取到与该Activity相关的Intent
Intent i = getIntent();
// 获取对象
User user = (User) i.getSerializableExtra("user");
tv = (TextView) findViewById(R.id.tv);
tv.setText(String.format("User info(name = %s, age = %d)", user.getName(), user.getAge()));
}
}
2、获取传回的数据
// MainActivity
public class MainActivity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout); // 指定一个视图
tv = findViewById(R.id.textView);
// 根据 id 找到所创建的按钮
findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// AnotherAty是通过Intent启动的
Intent i = new Intent(MainActivity.this, AnotherAty.class);
// 传数据给AnotherAty
i.putExtra("user", new User("Yjx", 26));
// 接受AnotherAty传回来的数据
startActivityForResult(i, 0); // 0:根据请求的代码确定此次请求的意义
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data); // requestCode:请求的意义,resultCode:结果数据的状态,data:传回来数据
tv.setText("另一个Activity返回的数据是: "+data.getStringExtra("data"));
}
}
// AnotherAty
public class AnotherAty extends AppCompatActivity {
private TextView tv;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another_aty);
tv = findViewById(R.id.tv);
editText = findViewById(R.id.editText);
// AnotherAty是通过Intent启动的
// 获取MainActivity传来的数据,通过getIntent获取到与该Activity相关的Intent
Intent i = getIntent();
// 获取对象
User user = (User) i.getSerializableExtra("user");
tv.setText(String.format("User info(name = %s, age = %d)", user.getName(), user.getAge()));
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 设置返回数据
Intent i = new Intent(); // Intent作用:1)启动一个Activity 2)作为一个数据的载体来传
i.putExtra("data",editText.getText().toString());
setResult(1, i); // 设置返回值:传回给mainActivity的值,1:返回的状态码,1代表成功,其余代表失败,i:返回的数据
finish(); // 返回完数据之后,结束掉当前Activity
}
});
}
}
四、Intent
1、显示 Intent
- 创建 Intent 并指定被启动的 Activity 的定义;
public class MainActivity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout); // 指定一个视图
findViewById(R.id.btnAnotherAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, MyAty.class)); // 显示Intent,直接指明了被启动的类的定义
}
});
}
}
2、隐式 Intent
- 创建 Intent 不指定被启动的 Activity 的定义;
五、Context
-
用来访问全局信息(应用程序的资源,图片资源、字符串资源 …)的接口,一些常用的组件会继承自 Context
-
访问全局的信息,必须通过 Context
public class MainActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tv = new TextView(this); // this:MainActivity的实例,将this传给context,在内部对context有一个引用 tv.setText(R.string.hello_world); setContentView(tv); // 指定一个视图 } }