今日总结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键的事件处理。

posted @   十乂  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示