1.intent 数据传递, 第一个页面数据传到第二个页面
在两个页面中进行数据传递
下面都以 intent 显式页面跳转为例,, 隐式跳转和显示跳转看下面链接
https://blog.csdn.net/qq_45844648/article/details/105362875
隐式显式页面跳转的方式
1, 单个数据传递
MAinActivity.java
- Intent intent=new Intent(MainActivity.this,SecondActiviry.class);
- // 存放数据 单个存放数据
- intent.putExtra("name",et_name.getText().toString().trim());// 第一个参数在要跳转的页面进行接收
- intent.putExtra("pass",et_pass.getText().toString().trim());// 第一个参数在要跳转的页面进行接收
- startActivity(intent);
SecondActivity.java 接收数据
- Intent intent=getIntent();
- // 取数据, 前一个页面怎么放的, 就怎么取 getIntExtra(); 第一个参数, 数据名字, 第二个参数是, 如果没取到就默认显示为 0
- String name=intent.getStringExtra("name") ;// 接收上边 intent.putExtra(), 第一个参数里的值
- String pass=intent.getStringExtra("pass") ;// 接收上边 intent.putExtra(), 第一个参数里的值
- // 可以根据 activity_second.xml 文件中定义过的控件进行设置被传过来的数据
- tv_name.setText("用户名为:"+name+"\n 密码为:"+pass);
2, 将数据打包传递
MainActivity.java
- Intent intent=new Intent(MainActivity.this,SecondActiviry.class);
- // 打包数据 多个数据
- Bundle bundle=new Bundle();
- bundle.putString("name",et_name.getText().toString().trim());
- bundle.putString("pass",et_pass.getText().toString().trim());
- intent.putExtras(bundle);
- startActivity(intent);
SecondActivity.java
- Intent intent=getIntent();
- // 数据打包方式,,, 取出数据
- Bundle bundle=intent.getExtras();
- String name=bundle.getString("name");
- String pass=bundle.getString("pass");
- // 自己把信息添加到控件
- tv_name.setText("用户名为:"+name+"\n 密码为:"+pass);
2,intent 数据回传, 第二个页面数据返回到第一个页面 (向上一个页面传递数据)
数据回传的时候不用 startActivity, 因为不单单是为了开启页面, 而是为了开启的页面传递回来数据.(为了让第二个页面传递回来数据)
MainActivity.java
- Intent intent=new Intent(MainActivity.this,SecondActiviry.class);
- // 打包数据 多个数据
- Bundle bundle=new Bundle();
- bundle.putString("name",et_name.getText().toString().trim());
- bundle.putString("pass",et_pass.getText().toString().trim());
- intent.putExtras(bundle);
- // 第一个参数是 intent 对象, 第二个参数是, 请求码,,,
- startActivityForResult(intent,1);
- //Ctrl+o 选择 onActivityResult,, 来重写方法
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- // 第一个参数, 请求码, 第二个结果码, 第三个是数据
- switch(requestCode){
- case 1://,, 对应上边的 requestCode 设置的值 1, 代表请求是发往 SecondeActivity
- if(resultCode==22){
- // 获取 secondactivity 里的返回的数据结果
- String shuju=data.getStringExtra("return");
- Toast.makeText(this,shuju,Toast.LENGTH_SHORT).show();
- }
- }
- }
SecondActivity.java
- Intent intent1=new Intent();
- intent1.putExtra("return","您的信息我以成功收到!!");
- // 此时没有设置 intend 从哪儿来, 到哪儿去, 需要调用 setResult() 方法.
- // 第一个参数, 结果码,
- setResult(22,intent1);
- finish();
总结以上:
MainActivity.java
- package com.example.intent;
- import androidx.annotation.Nullable;
- import androidx.appcompat.App.AppCompatActivity;
- import androidx.core.App.ActivityCompat;
- import androidx.core.content.ContextCompat;
- import Android.Manifest;
- import Android.annotation.SuppressLint;
- import Android.content.Intent;
- import Android.content.pm.PackageManager;
- import Android.NET.Uri;
- import Android.os.Bundle;
- import Android.provider.Settings;
- import Android.view.View;
- import Android.widget.Button;
- import Android.widget.TextView;
- import Android.widget.Toast;
- public class MainActivity extends AppCompatActivity implements View.OnClickListener {
- private Button button;
- private TextView et_name;
- private TextView et_pass;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- button =findViewById(R.id.button);
- et_name=findViewById(R.id.et_name);
- et_pass=findViewById(R.id.et_pass);
- button.setOnClickListener(this);
- //********************************1, 第一种方法 ********************************************************************
- // 创建 intent, 显示 intent
- // Intent intent=new Intent(MainActivity.this,SecondActivity.class);
- // startActivity(intent);
- //********************************2, 第二种方法 *********************************************************************
- // Intent intent=new Intent();
- // intent.setClass(MainActivity.this,SecondActivity.class);// 从哪儿来, 到哪儿去
- // startActivity(intent);
- //******************************** 打开百度浏览器 ********************************************************************
- // Intent intent=new Intent("andoid.intent.action.View");
- ////Action 是字符串 andoid.intent.action.View, 固定的常量,,,, 或者写成 Intent intent=new Intent(); intent.setAction("andoid.intent.action.View");
- // intent.setAction(Intent.ACTION_VIEW);
- ////Uri.parse("http://www.baidu.com") 把网址解析成 URI 对象
- // intent.setData(Uri.parse("http://www.baidu.com"));
- // startActivity(intent);
- }
- @Override
- public void onClick(View v) {
- //***************** 拨打电话 ************************************
- // Intent intent = new Intent();
- // if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)==PackageManager.PERMISSION_GRANTED){
- // intent.setAction(Intent.ACTION_CALL);
- // intent.setData(Uri.parse("tel:12345678"));
- // startActivity(intent);
- // }else{
- // ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
- // intent.setAction(Intent.ACTION_CALL);
- // intent.setData(Uri.parse("tel:12345678"));
- // startActivity(intent);
- // }
- //************************************* 隐式打开自己的 activity 并传递数据 *************************************************************************
- // 隐式打开自己的 activity,,, 在 manifest 中声明好暗号 也就是 setAction 里设置的,
- Intent intent=new Intent();
- intent.setAction("second");
- // 存放数据 单个存放数据
- // intent.putExtra("name",et_name.getText().toString().trim());
- // intent.putExtra("pass",et_pass.getText().toString().trim());
- // 打包数据 多个数据
- Bundle bundle=new Bundle();
- bundle.putString("name",et_name.getText().toString().trim());
- bundle.putString("pass",et_pass.getText().toString().trim());
- intent.putExtras(bundle);
- // 第一个参数是 intent 对象, 第二个参数是, 请求码,,,
- startActivityForResult(intent,1);
- }
- //Ctrl+o 选择 onActivityResult,, 来重写方法
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- // 第一个参数, 请求码, 第二个结果码, 第三个是数据
- switch(requestCode){
- case 1://,, 对应上边的 requestCode 设置的值 1, 代表请求是发往 SecondeActivity
- if(resultCode==22){
- // 获取 secondactivity 里的返回的数据结果
- String shuju=data.getStringExtra("return");
- Toast.makeText(this,shuju,Toast.LENGTH_SHORT).show();
- }
- }
- }
- }
SecondActivity.java
- package com.example.intent;
- import androidx.appcompat.App.AppCompatActivity;
- import Android.content.Intent;
- import Android.os.Bundle;
- import Android.view.View;
- import Android.widget.Button;
- import Android.widget.TextView;
- import Android.widget.Toast;
- public class SecondActivity extends AppCompatActivity {
- private TextView tv_name;
- private Button bt_fanhui;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_second);
- tv_name=findViewById(R.id.tv_name);
- bt_fanhui =findViewById(R.id.bt_fanhui);
- //1, 先获取 intent 是传递信息的那个 intent
- Intent intent=getIntent();
- //*********************************************************************************************************************
- // 取数据, 前一个页面怎么放的, 就怎么取 getIntExtra(); 第一个参数, 数据名字, 第二个参数是, 如果没取到就默认显示为 0
- // 取出数据
- // String name=intent.getStringExtra("name");// 参数对应 MainActivity 里放入数据的第一个参数保持一致, int 就用 int 类型, string 就用 string
- // String pass= intent.getStringExtra("pass");
- //***********************************************************************************************************************
- // 数据打包方式,,, 取出数据
- Bundle bundle=intent.getExtras();
- String name=bundle.getString("name");// 参数对应 MainActivity 里放入数据的第一个参数保持一致, int 就用 int 类型, string 就用 string
- String pass=bundle.getString("pass");
- //**********************************************************************************************************************
- tv_name.setText("您的信息为:\n 用户名为:"+name+"\n 密码为:"+pass);
- // 数据回传 点击返回按钮需要数据回传
- bt_fanhui.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent1=new Intent();
- intent1.putExtra("return","您的信息我以成功收到!!");
- // 此时没有设置 intend 从哪儿来, 到哪儿去, 需要调用 setResult() 方法.
- // 第一个参数, 结果码,
- setResult(22,intent1);
- finish();
- }
- });
- }
- }
来源: https://blog.csdn.net/qq_45844648/article/details/105364203