A.使用intent(意图)传值

MainActivity(源文件):
        1.intent.putExtra(key,value):key一般是String,值为 java八大基本数据类型及对应的数组,String及对应的数组, Serializable 及对应的数组等
        2.intent.putExtras(bundle);
        3.intent.putExtra(key,bundle)
DetailActivity(目标文件):
        1.intent.getXXXExtra(key)获取值
        2.bundle=intent.getExtras()
        3.bundle=intent.getExtras(key)

B.使用Application全局对象传值

1.自定义一个类MyApp继承Application 并重写它的onCreate()方法,将需要传递的值以成员变量的方式定义在MyApp 类中并提供getter和setter函数

2.在功能清单文件中指定自定义的全局应用程序application节点中指定android:name=".MyApp"

3.在MainActivity 中得到自定义的Appllication类型的子类对象MyApp类型的对象

MyApp myApp=(MyApp)this.getApplication();
        myApp.setName("xxx");
        myApp.setAge(20)

myApp.setDog(dog);

4.在详情Activity 中得到全局应用程序对象

MyApp myApp=(MyApp)this.getApplication();

xxx=myApp.getName()
        age=myApp.getAge()
        dog=myApp.getDog()

C.使用startActivityForResult()传值 ==》(反向传值)

1.使用startActivityForResult(intent,requestCode(大于等于0))方法激活目标Activity
2.在目标Activity 中调用setResult(resultCode,intent) 设置回传到源Activity 的结果码和意图对象

3.在源Activity 中重写onActivityResult(requestCode,resultCode,intent)方法得到目标Activity 回传的数据

这两种方法的用法:

1.区别

StartActivityForResult:是说明调用这个activity,关闭后可以接收到返回值

OnActivityForResult:当activity关闭后,如果有返回值,则会在这个方法内接收

2.联系

这两者是配对使用的,一个是告诉对方有接收值,一个是接收对方的返回值

反向结构传值示意图

请求码与作用码示意图

示例代码:

DetailActivity.Java:

package com.example.tf.reversetransmission;import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;public class DetailActivity extends AppCompatActivity {private EditText editText_name;private EditText editText_age;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.detail_main);this.editText_age = (EditText) this.findViewById(R.id.editText_age);this.editText_name = (EditText) this.findViewById(R.id.editText_name);}public void ok(View view){String name = this.editText_name.getText().toString().trim();String age = this.editText_age.getText().toString().trim();Intent data = new Intent();data.putExtra("name",name);data.putExtra("age",Integer.parseInt(age));//设置结果码和意图对象,会将这些值在当前Activity销毁后返回到激活当前Activity的Activity(MainActivity)中this.setResult(RESULT_OK,data);//销毁当前Activitythis.finish();}/*** 当用户按手机上的返回键时自动调用的方法*/@Overridepublic void finish(){String name = this.editText_age.getText().toString().trim();String age = this.editText_name.getText().toString().trim();Intent data = new Intent();data.putExtra("name",name);data.putExtra("age",Integer.parseInt(age));//同上this.setResult(RESULT_OK,data);//销毁当前Activity必须放到最后super.finish();}
}

detail.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="textPersonName"android:hint="请输入你的姓名"android:ems="10"android:id="@+id/editText_name"android:layout_gravity="center_horizontal" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="number"android:hint="请输入你的年龄"android:ems="10"android:id="@+id/editText_age" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="确定"android:onClick="ok"android:layout_gravity="center_horizontal" /></LinearLayout>

MainActivity.java

package com.example.tf.reversetransmission;import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;public class MainActivity extends AppCompatActivity {/*** 自定义请求码常量,值不能是1*/private static final int REQUEST_CODE = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*** @parm view*/public void openDetail(View view ){Intent intent = new Intent(this,DetailActivity.class);startActivityForResult(intent,REQUEST_CODE);}//protected void onActivityResult(int requestCode,int resultCode,Intent data){//if(requestCode==REQUEST_CODE){if(requestCode==RESULT_OK){String name = data.getStringExtra("name");int age = data.getIntExtra("age",0);System.out.println("onActivityResult().name="+name+",age="+age);}}System.out.println("======MainActivity.onActivityResult(int requestCode="+requestCode+", int resultCode="+resultCode+", Intent data="+data+")======");}
}

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="openDetail"android:text="以完全覆盖的形式启动详情Activity"android:layout_gravity="center_horizontal"/>
</LinearLayout>

注意:不能忘记在功能清单文件上注册DetailActivity。

D.传递自定义类型的对象,实现Serializable 接口或者Parcelable 接口

MainActivity中设置值:intent.putExtra(key,dog)
 DetailActivity 中获取值:Dog dog=(Dog)intent.getSerializableExtra(key)

E.全局静态变量传值

1.自定义全局静态变量类ContextData
2.在MainActivity中设置需要传递的值
        ContextData.setXXX(xxx);
3.在详情Activity 中获取值即可
        XXX=ContextData.getXXX()

android 之Activity的五种传值方式 (在从当前Activity跳转到目标Activity时的传值方式)相关推荐

  1. android ui 最新教程,Android更新UI的五种方式,androidui五种

    Android更新UI的五种方式,androidui五种handler.post activity.runOnUiThread view.post handler+Thread AsyncTask 例 ...

  2. [Android开发]Android更新UI的五种方式

    Android更新UI的五种方式: 1.handler.post 2.activity.runOnUiThread 3.view.post 4.handler+Thread 5.AsyncTask 下 ...

  3. android 实现毫秒定时器,Android实现定时器的五种方法实例详解

    一.Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用. 跟handler自身实现的定时器相比, ...

  4. Android经常使用的五种弹出对话框

    一个Android开发中经常使用对话框的小样例,共同拥有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框: <LinearLayout xmlns:android ...

  5. android屏幕适配的五种方式_讲一讲Android 9.0系统的新特性,对刘海屏设备进行适配...

    黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨郭霖来源丨郭霖(guolin_blog) 其实Android 9 ...

  6. android屏幕适配的五种方式,价值2000元的学习资源泄露,附答案

    开头 作为一个40的人,能有面试机会是格外的珍惜,也分外的诚恳.没什么豪言壮语,雄心大志.没有狼性,社会把中年人打磨成了听话的舔狗. 感谢马爸爸旗下公司,给了我为数不多机会中一个,而且还是个相当好的位 ...

  7. android Toast大全(五种情形)建立属于你自己的Toast

    Toast用于向用户显示一些帮助/提示.下面我做了5中效果,来说明Toast的强大,定义一个属于你自己的Toast. 1.默认效果 代码 Toast.makeText(getApplicationCo ...

  8. android微信被隐藏,五种微信隐藏技术,只能通过教程在Android上与微信一起使用...

    下载并安装Warcraft Century Computer Edition教程 一个. 游戏简介<魔兽世界>是一款即时移动游戏,该游戏具有丰富的游戏玩法,装备创作,特殊副本等,可以在游戏 ...

  9. android toast前面自动加内容,android Toast大全(五种情形)建立属于你自己的Toast...

    Toast用于向用户显示一些帮助/提示.下面我做了5中效果,来说明Toast的强大,定义一个属于你自己的Toast. 1.默认效果 代码 Toast.makeText(getApplicationCo ...

最新文章

  1. 给kali的metasploit下添加一个新的exploit
  2. Cissp-【第4章 通信与网络安全】-2021-3-12(393页-407页)
  3. C语言函数内static关键字 疑惑
  4. 使用DOM Breakpoints找到修改属性的Javascript代码
  5. 为什么游戏开发者不玩游戏_什么是游戏开发?
  6. JAVA多线程实现的三种方式 ()
  7. PullToRefresh
  8. 《加勒比海盗4:惊涛怪浪》高清图集 剧照欣赏
  9. 47不用加减乘除做加法
  10. 创建多个设备文件节点_使用DEVICE_ATTR实例分析
  11. SUSE12Sp3安装配置.net core 生产环境-总汇(持续更新中...)
  12. Cisco NTP配置
  13. Android开发小结Part11:SQLite 通过.db文件导入已有数据库
  14. python画图时常用的颜色——color=‘ ’
  15. matlab logspace 虚数,Matlab入门教程
  16. 传媒《财务管理》课程考试作业考核试题
  17. supervisor 管理后台进程
  18. Pytorch——报错解决:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
  19. Axure RP Extension for Chrome 安装插件
  20. win7系统双硬盘双系统问题解决

热门文章

  1. python基础7 (来自廖雪峰的官方网站)
  2. Linux中cp和scp命令的使用方法
  3. 【DIY】自己动手更换热水器镁棒,保养电加热热水器注意事项,电热水器镁棒多久更换一次实际数据参考...
  4. [Android工具]更新安卓百度云盘百度网盘资源搜索工具,安卓网盘搜索软件
  5. 【FPGA教程案例2】基于vivado核的NCO正弦余弦发生器设计与实现
  6. 我要做 Android 之面笔试总结
  7. C++使用GDI+实现图片格式转换
  8. 关于最近练习PYTHON代码的一点心得
  9. HT for Web 3D游戏设计设计--汉诺塔(Towers of Hanoi)
  10. 【转】JCR期刊分区及其检索方法