在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程。

  答案:可以通过Intent对象、静态变量、剪切板和全局对象进行数据传递,具体的数据传递方法如下。

      1. Intent对象

     Intent对象时在Activity之间传递数据的传统方式(同样适合于Service和BroadcastReceiver)。可以通过Intent.putExtra方法设置要传递的数据,通过Intent.getXxxExtra方法获取传递的数据。其中的Xxx表示Int、String等字符串。下面代码使用Intent对象传递一个int类型的值,并在另一个Activity中接收该值。

     传递int类型的值

 Intent intent=new Intent(this,MyActivity.class);
//保存Integer类型的值
intent.putExtra("intent_integer",300);
startActivity(intent);

     获取传递的int类型的值

 int intentInteger=getIntent().getExrtras().getInt("intent_integer");

  传递数据的限制:只能传递Java简单类型的数据(包括简单类型的数组)以及实现了java.io.Serializable的类的对象实例(类成员也必须是可序列化的)。

     2. 静态变量

    将类成员定义成public static,就可以直接通过类成员来传递数据。使用静态变量可以传递任何类型的数据。

     3. 剪切板

    可以利用Android系统提供的剪切板存取数据,代码如下:

    将数据保存在剪切板中

  

1 Intent intent=new Intent(this,MyActivity.class);
2 //获得管理剪切板的对象(ClipboardManager)
3 ClipboardManager clipboard=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
4 //向剪切板保存字符串
5 ClipData cd=ClipData.newPlainText("label","通过clipboard传递的数据");
6 clipboard.setPrimaryClip(cd);
7 startActivity(intent);

    从剪切板获取数据

ClipboardManager  clipboard=(ClipboardManager)getSystemService(context.CLIPBOARD_SERVICE);
//从剪切板中获得字符串
if(clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN){
ClipData cd=clipboard.getPrimaryClip();
Item item=cd.getItemAt(0);
txtView.setText(item.getText().toString());
}

4. 全局对象

  可以为每一个应用程序定义一个全局的对象。该对象的创建由系统负责。使用全局对象需要一个继承自android.app.Application的类,并在该类中定义任何类型的成员变量和方法。

 public class MyApp extends Application
{
public String country;
public Data data=new Data();//Data类不需要可序列化
}

  然后在AndroidManifest.xml文件中定义该类。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package=" "
android:versionCode="1"
android:versionName="1.0">
<application android:name=".MyApp" android:icon="@drawable/icon" android:label="@String/app_name">
......
</manifest>

  可以在应用程序中的任何地方通过如下代码获取MyApp类的对象。

  

MyApp myapp=(MyApp)getApplicationContext();

在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程。的更多相关文章

  1. 如何在数据表当中找出被删掉的数据行ID

    这个问题是一年前我刚步入IT行业的一个面试题,当时抓破头皮都想不到的问题,但现在回想过去自身不禁感到可笑,不多扯直接写解决方案.如何在数据表当中找出被删掉的数据行ID,意思是:在一堆的数据当中,让你找 ...

  2. C# 把带有父子关系的数据转化为------树形结构的数据 ,以及 找出父子级关系的数据中里面的根数据Id

    紧接上一篇,将List<Menu>的扁平结构数据, 转换成树形结构的数据 返回给前端   ,   废话不多说,开撸! --------------------- 步骤: 1. 建 Menu ...

  3. 【mysql】修改数据时候,抛出safe mode相关错误,处理方法

    在mysql5中,可以设置safe mode,比如在一个更新语句中 UPDATE table_name SET bDeleted=0; 执行时会错误,报: You are using safe upd ...

  4. Activity与Activity之间,Fragment与Fragment之间通过Bundle传值的研究

    一.Fragment与Activity的通讯   在使用fragment的时候,通常的用法都是使用一个activity来管理不同的fragment,所以每个fragment与activity的及时通讯 ...

  5. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  6. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  7. Android学习之Activity之间的数据传递

    Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...

  8. Activity之间的数据传递-android学习之旅(四十七)

    activity之间的数据传递主要有两种,一种是直接发送数据,另一种接受新启动的activity返回的数据,本质是一样的 使用Bundle传递数据 Intent使用Bundle在activity之间传 ...

  9. Activity之间传递大数据问题

    Android开发人员都知道,Intent适用于在不同的Activity之间传递数据,包括参数.字符串.以及序列化的对象等.但是笔者所做的项目用到了使用Intent 传递Bitmap图片对象,图片的数 ...

随机推荐

  1. CompressHelper

    public static string CompressString(string unCompressedString) { byte[] bytData = System.Text.Encodi ...

  2. hdu 1284 分硬币 &amp;&amp; uva 147

    #include<bits/stdc++.h> using namespace std; int main() { unsigned ]; memset(dp,,sizeof(dp)); ...

  3. Docker网络基础

    大量的互联网应用服务包括多个服务组件,这往往需要多个容器之间通过网络通信进行相互配合. Docker目前提供了映射容器端口到宿主主机和容器互联机制来为容器提供网络服务. 端口映射实现访问容器: 在启动 ...

  4. 二、记一次失败的 CAS 搭建 之 证书配置

    ==================================================================================================== ...

  5. codeforces C. Little Pony and Expected Maximum

    题意:一个筛子有m个面,然后扔n次,求最大值的期望; 思路:最大值为1 有1种,2有2n-1种,  3有3n -2n 种   所以为m的时有mn -(m-1)n 种,所以分别求每一种的概率,然后乘以这 ...

  6. NIO组件Selector工作机制详解(上)

    转自:http://blog.csdn.net/haoel/article/details/2224055 一.  前言 自从J2SE 1.4版本以来,JDK发布了全新的I/O类库,简称NIO,其不但 ...

  7. 3.Java日志框架slf4j、jcl、jul、log4j1、log4j2、logback大总结

    一.slf4j.jcl.jul.log4j1.log4j2.logback JUL:JDK中的日志记录工具,也常称为JDKLog.jdk-logging. LOG4J1:一个具体的日志实现框架. LO ...

  8. 解决EditText不能撑满全屏的问题及EditText你应该知道的属性

    一般我们要实现去下图一的效果很简单: 两个EditText就搞定 效果图一:   但是我们想让第二个EditText撑满剩余空间怎么做?如效果图二 效果图二: 解决: 使用了ScrollView嵌套L ...

  9. Linux 虚拟内存

    查看进程占用内存情况: ps -aux VSZ表示占用虚拟内存单位KBRSS表示占用物理内存单位KB 添加swap文件大小为4G 内部存储块每块1M dd if=/dev/zero of=/swap ...

  10. Spark RDD 操作

    1. Spark RDD 创建操作 1.1 数据集合   parallelize 可以创建一个能够并行操作的RDD.其函数定义如下: ) scala> sc.defaultParallelism ...