前言:不论是在哪一个app中都会有很多页面,比如某q、某x,从聊天列表可以进入聊天页面,这是两个完全不同的页面。这个东西在Android中叫做 Activity (活动)
一、Activity 三要素
在我们新建一个项目之后,AndroidStudio(后面简称AS)都会给我们创建好一个Activity(后面简称Act),那么这个页面就作为了App的启动页面。 下面来说一个Act组成的三要素。
1.1 布局文件 .xml
路径在app \ src \ main \ res \ layout
举个例子,系统给我们的创建的 acitvity_main.xml
布局文件里就是我们需要展示的ui。
1.2 控制布局的java文件
以系统创建的为例:app \ src \ main \ java \ com \ example \ myapplication \ MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
1.我们发现它继承了 AppCompatActivity ,我们的要求是 继承于Activity。这个Activity的子类,所以满足要求。
2.还有他重写了onCreate方法,并且调用了一个 setContentView() 方法,这个方法是用来填充布局的,R:资源 layout属于资源, activity_main 就是对应的xml布局了
1.3 要在AndroidManifest中注册Activity
注意注册Act要在 application节点中间写
//启动页
//过滤器
//意味着它是启动页,一个项目中只能有一个启动页
二、Activity的跳转与传值跳转
学会了act的组成,那我们需要从一个页面跳到另一个页面需要怎么做。
1、创建好目标页面
a、xml
b、java文件 名字为:Main2Activity
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
}
c、清单文件注册
2、写跳转方法
比如我们在Main要跳转到Main2
我们在Main写一个按钮,点击按钮然后跳转到 Main2
Button button = findViewById(R.id.btn_goto2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//构建一个Intent对象 参数1:当前页面的上下文 参数2:目标Act.class
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//跳转Act 参数:intent对象
startActivity(intent);
}
});
点击前:
点击后:
3、 页面传值跳转
如果我们现在有需求,要求页面Main->Main2 带参数或者带内容过去怎么办。
我们在Main的跳转里做手脚
//构建一个Intent对象 参数1:当前页面的上下文 参数2:目标Act.class
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//intent.putExtra
intent.putExtra("content","我是页面1传来的值");
//跳转Act 参数:intent对象
startActivity(intent);
然后在Main2接收,并且让其显示在Main2的文本框上
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
TextView textView = findViewById(R.id.tv_main2);
//获取intent信息
Intent intent = getIntent();
//获取intnet、传来的值
String content = intent.getStringExtra("content");
//设置在textview中
textView.setText(content);
}
看效果,点击前:
点击后:
有人可能会说,我不光想传String,还想有其他类型,当然Android都提供了,这里不做演示,把支持参数贴出来:
当然有这么多类型,到了Main2 也就会有 intent.getXXX
4、页面跳转回传
假设,我们在Main跳转到Main2 ,当Main2做了某些操作,我们Main页面需要知道,那么就用到了跳转回传,这个需要两个页面配合,我们来演示一下。
Main中代码:
//构建一个Intent对象 参数1:当前页面的上下文 参数2:目标Act.class
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//intent.putExtra
intent.putExtra("content","我是页面1传来的值");
//跳转回传
startActivityForResult(intent,100);
我们在Main2中加一个按钮为:确认更新
然后点击按钮的时候关闭Mian2,让Main得到某些信息
Main2代码:
Button button = findViewById(R.id.btn_main2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("result","我更新完了");
setResult(200,intent);
finish();
}
});
我们完成了准备工作,这里要注意的一点是,在Main中还需要重写一个方法:onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//一个请求码,一个响应码。 data是参数
if (requestCode==100&&resultCode==200){
//100是我们跳转的时候填的
//200是在Main2中填的
//这里我们直接把传过来的值,显示在按钮上
String result = data.getStringExtra("result");
button.setText(result);
}
}
}
来看演示
ok