zoukankan      html  css  js  c++  java
  • Android学习之基础知识四-Activity活动4讲(Intent传递数据)

    Intent除了可以开启一个活动,还能在启动活动的时候传递数据,此时Intent相当于一个保存数据的库,我们先把数据保存在Intent中,然后再根据各个activity的需要从其中取出数据。

     一、使用Intent向下一个activity传递数据

      1、思路:Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂时保存在Intent中,当启动另外一个活动后,再把这些数据从Intent中取出来就行了。

      2、在FirstActivity.java中有一个字符串,把这个字符串传递到SecondActivity.java中,操作如下:

    FirstActivity.java中的代码:

    SecondActivity.java中的代码:

      3、效果展示:

     

    点击button1:进入到SecondActivity.java的活动页面

     

    查看Logcat:
      1、根据SecondActivity.java中Log.d()传入的tag数据添加一个过滤器:SecondActivity

      2、将过滤器选为SecondActivity,就会看到打印出的数据

     二、使用Intent返回数据给上一个活动

      1、在Activity中有一个方法也可以启动活动,这个方法就是:startActivityForResult()方法,它可以在活动销毁的时候返回一些数据给上一个活动,startActivityForResult()方法接受两个参数。一个参数是Intent,第二个是请求码,用于在之后的回调中判断数据的来源,请求码只要是唯一的就行了(比如常量)。

    FirstActivity.java的代码: 

     1 public class FirstActivity extends AppCompatActivity {
     2     @Override
     3     protected void onCreate(@Nullable Bundle savedInstanceState) {
     4         super.onCreate(savedInstanceState);
     5         setContentView(R.layout.first_layout);
     6         Button button = (Button) findViewById(R.id.button1);
     7         button.setOnClickListener(new View.OnClickListener() {
     8             @Override
     9             public void onClick(View view) {
    10                 Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    11                 startActivityForResult(intent, 1);
    12                 /*
    13                 1、startActivityForResult()方法:当一个活动销毁时返回一个数据给上一个活动,它也可以开启一个活动,它传入两个参数
    14                     第一个参数:intent
    15                     第二个参数:请求码,唯一即可,用于判断数据的来源
    16                 2、使用startActivityForResult()方法来开启SecondActivity,当SecondActivity活动销毁过后,会调用上一个活动的onActivityResult()方法,
    17                     即这里的FirstActivity中的onActivityResult()方法,因此我们要在FirstActivity活动中重写onActivityResult()方法。
    18                     onActivityResult()这个方法的作用是得到返回的数据。
    19                 */
    20             }
    21         });
    22     }
    23 
    24     @Override
    25     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    26         switch (requestCode) {
    27             case 1:
    28                 if (resultCode == RESULT_OK) {
    29                     String returnData = data.getStringExtra("return_extra");
    30                     Log.d("FirstActivity", returnData);
    31                     /*
    32                     1、该方法中传入三个参数:
    33                         requestCode:请求码
    34                         resultCode:处理结果
    35                         data:携带数据的Intent
    36                     */
    37                 }
    38                 break;
    39             default:
    40                 break;
    41         }
    42     }
    43 }

    SecondActivity.java中的代码:

      2、运行效果:

    点击button1:进入SecondActivity活动界面

    打开Logcat查看打印数据(先创建一个FirstActivity的过滤器):

     三、点击Back键返回数据
      上面返回给FirstActivity的数据是在点击SecondActivity活动界面的button2按钮触发的,如果用户直接通过手机的Back键回到FirstActivity界面,也是可以返回数据,我们只需要在SecondActivity.java中重写onBackPressed()方法就能解决该问题,代码如下:

      想要点击按钮与Back键均能返回数据,其他代码不变,把SecondActivity的代码结合就行了:

     1 public class SecondActivity extends AppCompatActivity {
     2        @Override
     3    protected void onCreate(@Nullable Bundle savedInstanceState) {
     4        super.onCreate(savedInstanceState);
     5        setContentView(R.layout.second_layout);
     6        Button button=findViewById(R.id.button2);
     7        button.setOnClickListener(new View.OnClickListener() {
     8            @Override
     9            public void onClick(View view) {
    10                Intent intent=new Intent();
    11                intent.putExtra("return_extra","Button FirstActivity");
    12                setResult(RESULT_OK,intent);
    13                finish();
    14                /*
    15                 1、这里的Intent仅仅是传递数据而已,没有任何意图,通过putExtra()方法把数据存放在intent中
    16                 2、setResult()方法:这个方法很重要,是专门用于向上一个活动返回数据的,这个方法有两个参数:
    17                     第一个参数:用于向上一个活动返回数据的处理结果,RESULT_OK 、 RESULT_CANCELED两种
    18                     第二个参数:返回的数据,将带有数据的intent返回过去
    19                 3、finish():销毁活动
    20                 */
    21             }
    22         });
    23     }
    24     @Override
    25     public void onBackPressed() {
    26         Intent intent=new Intent();
    27         intent.putExtra("return_extra","Back FirstActivity");
    28         setResult(RESULT_OK,intent);
    29         finish();
    30     }
    31 }
  • 相关阅读:
    Java MyBatis 插入数据库返回主键
    安卓开发实战之app之版本更新升级(DownloadManager和http下载)完整实现
    js-关于异步原理的理解和总结
    Out of range value for column 'huid' at row
    iOS开发之如何在用户删除应用后保持一些数据
    App开放接口api安全性的设计与实现
    Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用
    input输入框自动获取焦点
    java 静态数组 和非静态数组的区别
    js中引入js
  • 原文地址:https://www.cnblogs.com/hh8888-log/p/9856227.html
Copyright © 2011-2022 走看看