-
安卓activity之间传递数据
2018-06-22 12:35:27在学习android时候发现Activity之间传递数据是比较复杂的,在Activity中调用另一个Activity时,需要调用startActivity(Intent i), 若需要在调用另外一个Activity的同时传递数据,那么就需要利用android.os.Bundle...在学习android时候发现Activity之间传递数据是比较复杂的,在Activity中调用另一个Activity时,需要调用startActivity(Intent i), 若需要在调用另外一个Activity的同时传递数据,那么就需要利用android.os.Bundle对象封装数据的能力,将欲传递的数据或参数,通过Bundle来传递不同Intent之间的数据。Bundle对象针对了不同的数据类型提供了许多的方法,例如,传递String类型的数据,使用的方法为Bundle.putString(stringName,stringValue):
看看书和网上的资料总结了一下传递的过程
简单的传递数据实现
1.新建一个project
2.在这个Activity里添加一个Button
3、创建另一个Activity,添加一个textview并且设置好id
4.MainActivity中代码如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建并实现一个监听器
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//监听器运作
Intent i=new Intent(MainActivity.this,Main2Activity.class);//MainActivity和Main2Ativity连接起来
i.putExtra("data","nihao");//用putExtra把内容传送到另一个Activity,名字是data,值是nihao
startActivity(i);//启动第二个activity}
});
}
}在Mian2Activity代码如下
public class Main2Activity extends AppCompatActivity {
private TextView tv;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);Intent i=getIntent();
tv=(TextView) findViewById(R.id.tv22);
tv.setText(i.getStringExtra("data"));
}
} -
安卓笔记Activity间传递数据
2016-12-15 10:54:44在通过Intent启动新的Activity时,经常需要向目标Activity传递数据。从形式上来看通过Intent启动Activity时传递数据有两种方式,一是显示的将数据放入bundle中,然后将bundle放入intent中;二是将数据直接放入Intent...1.简介
在通过Intent启动新的Activity时,经常需要向目标Activity传递数据。从形式上来看通过Intent启动Activity时传递数据有两种方式,一是显示的将数据放入bundle中,然后将bundle放入intent中;二是将数据直接放入Intent中。下面通过示例来展示这两种数据的传递方式,并且从Android源码分析,这两种方式的本质是一样的,即都是通过Bundle来存取数据的。2.1.通过Bundle传递数据
两个Activity,从MainActivity中将数据传递到SecondActivity,数据类型有字符串、整形、布尔型三种。MainActivity的代码如下:private final static String NAME_KEY = "name"; private final static String AGE_KEY = "age"; private final static String IS_FEMALE_KEY = "isfemale"; Intent intent = new Intent(MainActivity.this,SecondActivity.class); Bundle data = new Bundle(); data.putString(NAME_KEY,"zhangsan");//将数据放入bundle data.putInt(AGE_KEY,25); data.putBoolean(IS_FEMALE_KEY,true); intent.putExtras(data); //在SecondActivity中,将传递的数据取出 Bundle data = getIntent().getExtras();//从bundle中取出数据 String name = data.getString(MainActivity.NAME_KEY); int age = data.getInt(MainActivity.AGE_KEY); boolean isfemale = data.getBoolean(MainActivity.IS_FEMALE_KEY); Log.d(LOG_TAG,"name = "+name); Log.d(LOG_TAG,"age = "+age); Log.d(LOG_TAG,"isfemale = "+isfemale);
Bundle可以传递序列化对象,其方法是putSerializable(String key, Serializable value),putParcelable(String key, Parcelable value),分别可以传递实现了Serializable和Parcelb接口的对象,我比较倾向于通过这种方式传递数据,其使用方式如下:
//存入数据 Person person = new Person();//Person是一个JavaBean,实现了Serializable接口 person.setName("lisi");//设置相应的属性值 person.setAge(27); person.setIsfemale(true); mIntent.putExtra(PERSON_KEY,person); //取出数据 Bundle data = intent.getExtras(); Person person = (Person) data.getSerializable(MainActivity.PERSON_KEY); Log.d(LOG_TAG,"name = "+person.getName()); Log.d(LOG_TAG,"age = "+person.getAge()); Log.d(LOG_TAG,"isfemale = "+person.isfemale());
2.2.省略bundle直接把数据放入Intent
//在MainActivity中存入数据:
intent.putExtra(NAME_KEY,”zhangsan”);
intent.putExtra(AGE_KEY,25);
intent.putExtra(IS_FEMALE_KEY,false);//在SecondActivity中取出数据: Intent intent = getIntent(); String name = intent.getStringExtra(MainActivity.NAME_KEY); int age = intent.getIntExtra(MainActivity.AGE_KEY,30); boolean isfemale = intent.getBooleanExtra(MainActivity.IS_FEMALE_KEY,true);
同样,通过Intent也可传递序列化对象,使用方式和Bundle的类似。
3.两种数据传递方式的联系
通过intent或者bundle传递数据,其本质都是通过bundle传递,可以通过以下方式验证:在MainActivity中将数据直接放入intent中,在SecondActivity中先通过intent.getExtras()取出bundle,然后通过bundle的方法同样可以取出相应的数据。
从Android源码来看,比如将String类型的value通过Intent的putExtra()方法放入Intent,其本质是放入到了mExtras中,而mExtras为Bundle类型。如果mExtras不是null,则将数据放入mExtras中,否则自动新建一个并存入数据。而在取数据时,getStringExtra(String name)也是通过bundle获取数据的,相关源码如下://Intent的putExtra(String, String)方法 public Intent putExtra(String name, String value) { if (mExtras == null) { mExtras = new Bundle();//如果mExtras为null则直接new一个Bundle } mExtras.putString(name, value);//否则,将数据存入mExtras return this; } //Intent的getStringExtra()方法 public String getStringExtra(String name) { return mExtras == null ? null : mExtras.getString(name);//通过mExtras取出数据 }
4.Bundle是如何存取数据的?
Bundle是通过ArrayMap来存取数据的。//Bundle的putString()方法 public void putString( String key, String value) { unparcel(); mMap.put(key, value);//mMap的类型是ArrayMap } //Bundle的getString()方法 public String getString(String key) { .... final Object o = mMap.get(key); .... return (String) o; .... }
文/启才(简书作者)
原文链接:http://www.jianshu.com/p/a17313dd19da
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 -
安卓Activity之间传递数据和Andriod Studio中配置Logcat Filter
2019-03-09 13:12:461.Activity之间设置点击按钮传递数据,首先需要创建两个activity页面,然后在MainActivity里面配置点击事件和intent, 关键的是intent中的方法putExtra(“key值”,“字符串”) public class MainActivity extends ...1.Activity之间设置点击按钮传递数据,首先需要创建两个activity页面,然后在MainActivity里面配置点击事件和intent,
关键的是intent中的方法putExtra(“key值”,“字符串”)
public class MainActivity extends AppCompatActivity{
private Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(MainActivity.this,Main22Activity.class);
intent.putExtra(“data”,“哈哈哈”);
startActivity(intent);
}
});}
2.配置第二个Activity页面,将intent传过来的参数赋值给bundle,然后将bundle的值赋值给String data,然后Log.d打印出来,log里面的信息中第一个是tag信号是Main22Activity,第二个是key值即为变量值,然后运行就会在Logcat 中显示出来。下面是第二个Activity的代码。
public class Main22Activity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main22); Bundle bundle=getIntent().getExtras(); String data=bundle.getString("data"); Log.d("Main22Activity", data); }
}
3.然后配置Logcat Filter 信号筛选器,其中Filter Name是tag信号的名称,和下面的Log Tag相同,然后最后的Log level是需要显示信号的等级,因为在第二个代码中Log.d 其中的d代表的就是Debug,然后筛选出来的就是Debug信号
4.最后在控制台的log Cat中就会显示从第一个Activity中传递过来的String变量值。 -
安卓activity之间的数据传递
2015-01-12 18:16:11Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcast。 组件名称 方法名称 Activity startActivity() startActivityForResult()1.Intent和Bundle
Intent可以理解为不同组件通信的媒介或者信使。
Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcast。
组件名称
方法名称
Activity
startActivity()
startActivityForResult()
Service
startService()
bindService()
Broadcasts
sendBroadcast()
sendOrderedBroadcast()
sendStickyBroadcast()
Intent对象由以下六个部分组成:
Component name
Action
Data
Category
Extras
Flags
范例
(1)新建一个bundle类
Bundle mBundle = new Bundle();(2)bundle类中加入数据(key -value的形式,另一个activity里面取数据的时候,就要用到key,找出对应的value)
mBundle.putString("Data", "data from TestBundle");
(3)新建一个intent对象,并将该bundle加入这个intent对象
Intent intent = new Intent();
intent.setClass(TestBundle.this, Target.class);
Bundle mBundle = new Bundle();
mBundle.putString("Data", "data from TestBundle");//压入数据
intent.putExtras(mBundle);
startActivity(intent);
(4)
Bundle bundle = getIntent().getExtras();//得到传过来的bundle
String data = bundle.getString("Data");//读出数据2.运用startActivityForResult()
请求码和结果码请求码的作用:startActivityForResult(Intent intent, int requestCode)的第二个参数为请求码。请求码的值是根据业务需要由自已设定,用于标识请求来源例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。这个时候,我们就需要判断是按钮打开了Activity,我们可以这样做首先,在startActivityForResult时候设置请求码的数值button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);}
});
button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);}
});
接着,在onActivityResult中判断请求码做出不同的操作:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case 1:
//来自按钮1的请求,作相应业务处理
case 2:
//来自按钮2的请求,作相应业务处理
}
}结果码的作用:
在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):
public class ResultActivity extends Activity {
.....
ResultActivity.this.setResult(1, intent);
ResultActivity.this.finish();
}
public class NewActivity extends Activity {
......
NewActivity.this.setResult(2, intent);
NewActivity.this.finish();
}
public class MainActivity extends Activity { // 在该Activity会打开ResultActivity和NewActivity
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode){
case 1:
// ResultActivity的返回数据
case 2:
// NewActivity的返回数据
}
}
}3.重载onActivityResult
如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。 -
安卓Service向Activity传递数据,更新UI
2016-09-07 16:24:521服务:执行定时任务,发起网络请求定位,请求到的结果传递到活动,在地图上展示。2活动关键代码: 绑定服务后会获取LocationService.LocationBinder对象,在此处调用getLocationService()方法获取Service实例,... -
安卓开发-Activity间数据传递和回传
2015-12-12 00:38:39安卓开发-Activity间数据传递和回传 -
安卓开发笔记——通过SharePreferences实现Adapter向Activity传递数据
2021-01-20 08:44:212.跳转之后将所点击项目的值(此处为“oppo”)传给相应Activity(此处为SortSearchActivity),实现搜索并将商品详情显示出来。 具体实现效果如下图所示(点击oppo): 1.如何解决界面跳转问题,通过Context实现... -
安卓Activity之间的数据传递四种方法,以及数据回传的实现
2020-11-21 17:19:28显式Intent来跳转页面和传递数据: Intent intent=new Intent(MainActivity.this,ReceiverActivity.class); intent.putExtra("显式数据","显示意图Intent传送数据"); startActivity(intent); 接受数据时: TextView... -
安卓学习之Activity之间传递数据
2019-12-21 09:55:481.通过intent传递数据 通过Intent传递方法核心就是通过putEntry来传递方法。 传递代码: intent.putExtra("KEY_HELLO","helloword"); 接受代码: Intent intent=getIntent(); String value=intent.... -
安卓用Intent在不同的Activity传递数据
2014-04-26 22:44:22在要传递的Activity Intent intent=new Intent(); intent.setClass(WriteToTagNameActivity.this, WriteTagHint.class);//从一个activity跳转到另一个activity intent.putExtra("cardid -
kotlin安卓开发:fragment向activity传递数据通过handler,设置回调方法
2018-11-29 13:33:37现在看看怎么从fragment向activity传递数据。 比如说,我们在一个ViewPage里面设置了若干个fragment,fragment里面有一个按钮,提交相关当前fg下标给viewPage所在的activity,删除当前的fg。 这里使用了handler,... -
安卓开发-intent在Activity之间数据传递
2018-01-31 01:38:11使用Bundle传递数据的跳转 Bundle类 示例 直接使用Intent传递数据 示例 得到新Activity关闭后的数据 示例 intent实现普通跳转 使用intent的setclass方法,示例(由此界面跳转到NewAct -
安卓传递数据问题,将Activity的数据传到View当中去?
2016-07-02 13:54:36如果我在View里用Context接收数据的话,那么Activity中以什么方式发送数据?是以Intent还是写一个构造方法? 能不能具体说一下,在这方面学习一下,网上讲的云里雾里的,都不太懂,具体最好,谢谢了! -
安卓从一个Activity跳转到另一个Activity传递数据实现
2014-03-04 20:44:25///获取前面的那个activity传过来的数据 v1.setText(bundle.getString("str1"));//用textview显示。 v2.setText(bundle.getString("str2")); 参考博客: http://ant-qingyun27sc.iteye.com/blog/1589812 ... -
安卓开发-Activity之间的数据传递
2020-01-03 14:48:07安卓开发-Activity之间的数据传递 开发环境:MacbookPro Catalina + Android Studio 3.5.3 1. 明确实现思路 创建两个Activity,名称分别为MainActivity和MainActivity2, 在MainActivity中添加一个输入框、一个按钮、... -
安卓数据传递
2018-04-01 14:40:32A activity打开B ...B关闭把数据传给A B activity Intent intent = new Intent(); setResult(100,intent); A activity (A 打开 B startActivityForResult(intent,100);) @Override protected void onActi... -
Android安卓 按返回键时将activity的数据传递给另一个activity
2019-10-20 21:55:44背景:作业里边有一题,要求为物理按键——返回键,实现...于是先在网上搜索,Android 按返回键怎么传递数据? 网上的描述都很简单,寥寥几行代码。主要有两种方法。 方法一:重写返回键方法 public boolean onKe... -
安卓学习笔记----简述Activity间数据传递方法之利用Intent传递extra信息
2020-02-21 15:04:15安卓Activity间信息传递方式有很多,这里我们实现利用intent传递extra信息这种方式 Intent简介 众所周知,安卓一个Activity打开另一个Activity最简单方法是使用startActivity(Intent),参数Intent是component用来与... -
3.安卓基础之Activity间的数据传递
2018-09-14 13:27:00零、前言 打开FromActivity,通过按钮以返回结果方式打开ToActivity,同时在intent中加入数据, 在To... 按返回按钮,将ToActivity数据传递给FromActivity,在onActivityResult方法中验证返回结果并将数据填充... -
在安卓中使用Bundle在Activity之间传递数据
2015-12-24 17:06:53此文主要还是针对刚开始接触...第一个Activity package com.example.jsontext; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import androi -
初学之安卓的两种activity间传递数据的方法
2014-10-27 21:40:21在这里我要说明的是用intent和全局变量的方法jiagn 1使用intent传递数据