android 之Activity的五种传值方式 (在从当前Activity跳转到目标Activity时的传值方式)
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时的传值方式)相关推荐
- android ui 最新教程,Android更新UI的五种方式,androidui五种
Android更新UI的五种方式,androidui五种handler.post activity.runOnUiThread view.post handler+Thread AsyncTask 例 ...
- [Android开发]Android更新UI的五种方式
Android更新UI的五种方式: 1.handler.post 2.activity.runOnUiThread 3.view.post 4.handler+Thread 5.AsyncTask 下 ...
- android 实现毫秒定时器,Android实现定时器的五种方法实例详解
一.Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用. 跟handler自身实现的定时器相比, ...
- Android经常使用的五种弹出对话框
一个Android开发中经常使用对话框的小样例,共同拥有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框: <LinearLayout xmlns:android ...
- android屏幕适配的五种方式_讲一讲Android 9.0系统的新特性,对刘海屏设备进行适配...
黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨郭霖来源丨郭霖(guolin_blog) 其实Android 9 ...
- android屏幕适配的五种方式,价值2000元的学习资源泄露,附答案
开头 作为一个40的人,能有面试机会是格外的珍惜,也分外的诚恳.没什么豪言壮语,雄心大志.没有狼性,社会把中年人打磨成了听话的舔狗. 感谢马爸爸旗下公司,给了我为数不多机会中一个,而且还是个相当好的位 ...
- android Toast大全(五种情形)建立属于你自己的Toast
Toast用于向用户显示一些帮助/提示.下面我做了5中效果,来说明Toast的强大,定义一个属于你自己的Toast. 1.默认效果 代码 Toast.makeText(getApplicationCo ...
- android微信被隐藏,五种微信隐藏技术,只能通过教程在Android上与微信一起使用...
下载并安装Warcraft Century Computer Edition教程 一个. 游戏简介<魔兽世界>是一款即时移动游戏,该游戏具有丰富的游戏玩法,装备创作,特殊副本等,可以在游戏 ...
- android toast前面自动加内容,android Toast大全(五种情形)建立属于你自己的Toast...
Toast用于向用户显示一些帮助/提示.下面我做了5中效果,来说明Toast的强大,定义一个属于你自己的Toast. 1.默认效果 代码 Toast.makeText(getApplicationCo ...
最新文章
- 给kali的metasploit下添加一个新的exploit
- Cissp-【第4章 通信与网络安全】-2021-3-12(393页-407页)
- C语言函数内static关键字 疑惑
- 使用DOM Breakpoints找到修改属性的Javascript代码
- 为什么游戏开发者不玩游戏_什么是游戏开发?
- JAVA多线程实现的三种方式 ()
- PullToRefresh
- 《加勒比海盗4:惊涛怪浪》高清图集 剧照欣赏
- 47不用加减乘除做加法
- 创建多个设备文件节点_使用DEVICE_ATTR实例分析
- SUSE12Sp3安装配置.net core 生产环境-总汇(持续更新中...)
- Cisco NTP配置
- Android开发小结Part11:SQLite 通过.db文件导入已有数据库
- python画图时常用的颜色——color=‘ ’
- matlab logspace 虚数,Matlab入门教程
- 传媒《财务管理》课程考试作业考核试题
- supervisor 管理后台进程
- Pytorch——报错解决:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
- Axure RP Extension for Chrome 安装插件
- win7系统双硬盘双系统问题解决
热门文章
- python基础7 (来自廖雪峰的官方网站)
- Linux中cp和scp命令的使用方法
- 【DIY】自己动手更换热水器镁棒,保养电加热热水器注意事项,电热水器镁棒多久更换一次实际数据参考...
- [Android工具]更新安卓百度云盘百度网盘资源搜索工具,安卓网盘搜索软件
- 【FPGA教程案例2】基于vivado核的NCO正弦余弦发生器设计与实现
- 我要做 Android 之面笔试总结
- C++使用GDI+实现图片格式转换
- 关于最近练习PYTHON代码的一点心得
- HT for Web 3D游戏设计设计--汉诺塔(Towers of Hanoi)
- 【转】JCR期刊分区及其检索方法