今日总结2023/03/07
今天学习了activity的界面跳转
Intent由以下各个组成部分:
component(组件):目的组件
action(动作):用来表现意图的行动
category(类别):用来表现动作的类别
data(数据):表示与动作要操纵的数据
type(数据类型):对于data范例的描写
extras(扩展信息):扩展信息
Flags(标志位):期望这个意图的运行模式
Intent类型分为显式Intent(直接类型)、隐式Intent(间接类型)。
Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity(),可以启动新的 Activity 实例。Intent 用于描述要启动的 Activity,并携带任何必要的数据。如果希望在 Activity 完成后收到结果,请调用 startActivityForResult()。在 Activity 的 onActivityResult() 回调中,您的 Activity 将结果作为单独的 Intent 对象接收。
一、显示调用方法
当前页面A命名为:MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 页面 跳转下一个页面的跳转按钮
Button nextBt = findViewById(R.id.nextBtn);
nextBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 跳转下一个页面
Intent inter = new Intent(MainActivity.this, NextActiverVC.class);
startActivity(inter);
}
});
}
}
跳转页面B命名为:NextActiverVC
public class NextActiverVC extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
// 页面内的一个返回按钮
Button gobackBtn = findViewById(R.id.button);
gobackBtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// 返回上一个页面
finish();
}
});
System.out.println("--nextVC----onCreate--------开始----");
}
}
1.单个页面跳转
1)Intent直接类方法
Intent inter = new Intent(this, NextActiverVC.class);
startActivity(inter);
//或者
Intent inter = new Intent(MainActivity.this, NextActiverVC.class);
startActivity(inter);
// 或者
Intent inter = new Intent();
inter.setComponent(new ComponentName(this, NextActiverVC.class));
startActivity(inter);
2)Intent对象设置方法
Intent inter = new Intent();
inter.setClass(this,NextActiverVC.class);
startActivity(inter);
// 或者
Intent inter = new Intent();
inter.setClass(MainActivity.this,NextActiverVC.class);
startActivity(inter);
// 或者
Intent inter = new Intent();
inter.setComponent(new ComponentName(MainActivity.this, NextActiverVC.class));
startActivity(inter);
其中使用component组件:目标组件
2.多层页面跳转
跳转页面C命名为:ThirtvcActivity
public class ThirtvcActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thirtvc);
}
}
直接同A页面直接跳转到C页面,中间页面是B页面
Activity A-——>ActivityB ——> Activity C
跳转的方式:
Intent intents[] = new Intent[2];
Intent intent1 = new Intent(this,NextActiverVC.class);
Intent intent2 = new Intent(this, ThirtvcActivity.class);
intents[0] = intent1;
intents[1] = intent2;
startActivities(intents);
3. 页面跳转回调传参
从页面A(MainActivity)使用startActivityForResult跳转到B(NextActivity)页面,B页面点击返回时将新写入的值通过Intent传回到A页面。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button nextBtn = findViewById(R.id.mainBtn);
nextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/// 按钮 下一页
Intent intent = new Intent(MainActivity.this, NextActivity.class);
startActivityForResult(intent, 3);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 3 && resultCode == 5){
String result = data.getStringExtra("resultStr");
System.out.println(result);
}
}
}
public class NextActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
final Button finishBtn = findViewById(R.id.finishBtn);
finishBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent finishIntent = new Intent();
finishIntent.putExtra("resultStr", "测试返回数据");
setResult(5,finishIntent);
finishActivity(3);
}
});
}
// 避免通过点击返回键的方式,返回到上一个Activity页面,无法实现数据的回传。
// 下边有两种方式实现点击返回按钮,回传参数
// 方式一: 回调返回按钮之前, 设置需要返回的Intent传的参数
// 使用方法二时,方法一不会被调用。
@Override
public void onBackPressed() {
Intent finishIntent = new Intent();
finishIntent.putExtra("resultStr", "测试返回数据");
setResult(5,finishIntent);
finishActivity(3);
System.out.println("--------------onBackPressed--------------");
super.onBackPressed();
}
// 方法二:通过监听按键的方式,判断点击返回按钮KEYCODE_BACK,实现设置返回参数。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("--------------onKeyDown--------------");
if (keyCode == KeyEvent.KEYCODE_BACK){
Intent finishIntent = new Intent();
finishIntent.putExtra("resultStr", "测试返回数据");
setResult(5,finishIntent);
finishActivity(3);
return true;
}else{
return super.onKeyDown(keyCode, event);
}
}
}
注意:
系统的Back返回键,直接返回RESULT_CANCELED,不会带有数据参数,所有如果点击返回键时返回数据,必须重写或者截获Back键的事件处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端