找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4721|回复: 1
打印 上一主题 下一主题
收起左侧

在不同的Activity之间传递数据

[复制链接]
跳转到指定楼层
楼主
ID:72008 发表于 2015-1-12 01:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    在Android中传递数据的方法非常多,主要学习了四种:
    1.通过Intent传递数据
    2.通过静态变量传递数据
    3.通过剪切板传递数据
    4.通过全局变量传递数据
一、通过Intent传递数据
    这是最常用的一种数据传递的方法。通过Intent.putExtra()方法可以将简单类型的数据或者可序列化的对象保存在Intent对象中,然后在目标Activity中使用getXxx(getInt、getString等)方法获得这些数据。
    在当前的Activity代码中:
    Intent intent = new Intent();
    intent.setClass(TransmitDataMainActivity.this,activity1.class);//TransmitDataMainActivity是目前的窗口,activity是目标窗口
                                            intent.putExtra("Name", "张三");
                                            intent.putExtra("Age", "22");
                                            intent.putExtra("Sex", "男");
                                            startActivity(intent);//开始跳转
    在目标Activity代码中:
    String Name = intent.getStringExtra("Name");
    String Age    = intent.getStringExtra("Age");
    String Sex    = intent.getStringExtra("Sex");
二、使用静态变量传递数据
    虽然使用Intent对象可以很方便的传递数据,这也是官方推荐的方式,但是Intent有他的局限性,Intent无法传递不能序列化的对象,也就是没有实现java.io.Serializable接口的类创建的对象。例如,图像Bitmap对象就无法通过Intent传递。
    可以在使用静态变量进行传递数据。如在目标Activity(如Activity2)中:
    public static String Name;
    public static String Age;
    public static String Sex;
    在其他的Activity中便可以使用Activity2.Name、Activity2.Age、Activity.Sex就可以访问来实现数据的传递。
三、使用剪切板传递数据
    由于剪切板只能存储简单类型数据以及可序列化的对象,对于某些不可序列化的对象如果可以将其转化为字节流,也可以将这些对象保存在剪切板中。
四、使用全局对象传递数据
    虽然使用静态变量可以传递任意类型的数据,但是官方不建议这么做。如果在类中大量的使用静态变量(尤其是使用很占资源的变量,如Bitmap对象)可能会导致内存溢出,而且还可能因为静态变量在很多类中出现而造成代码难以维护和混乱的状况。全局对象可以完全取代静态变量。
    Android中的 全局对象所对应的类可以从android.app.Application继承。下面就是一个典型的全局类。
    public class MyApp extends Application
    {
        public String country;
        public Data data = new Data();
    }
    在编写完全局类之后,还需要通过<application>在AndroidManifext.xml中注册。
    然后通过Activity.getApplicationContext()方法可以获得全局对象。
    MyApp app = (MyApp) getApplicationContext();
    app.country = "中国";
    app.data.id  = "123";
    app.data.name = "人民";

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:72008 发表于 2015-1-12 01:13 | 只看该作者
    在实验室呆了一天,看了Android的开发视频教程,然后写程序,改程序。
    今天粗略的学习了Activity的生命周期,还有Activity的布局。
    收获:
    1.每一个控件的android:layout_width和android:layout_height都要设置,而且可以直接设置大小,不一定局限于给定的三个参数,fill_parent、match_matchparent、wrap_content。
    2.通过findViewById(int)方法获取控件的时候一定要注意是否已经使用了setContentView()关联了布局文件,而且只能获取当前View的控件,否则就会得到了Null,然后后面再调用对象方法的时候就会出现错误。
    3.声明周期函数OnStop()只有当一个Activity2完全遮挡住了Activity1的时候,才会调用Actitvity1的onStop()方法。
    4.对于字符资源最好统一的在res/values/strings.xml中定义,这样如果更改字符资源的时候就可以牵一发动全身,不需要逐个的更改。
    5.建立工程文件的时候选择的最低版本SDK会对代码产生影响,因为有的API只能在高版本中使用!
    6.AndroidManifest.xml不可以更改名称,每一个Activity都要在这个文件中进行注册。而且在此文件中可以声明哪个Activity为主窗口,住过设置了多个主窗口,安装程序的时候就会分别产生相应的图标。
    感想:难点不在于功能的代码实现,而在于布局XML文件的编写,弄出来一个好看的界面真心不容易,可能是我还是菜鸟的原因吧,干什么都不容易啊!下次再用什么App的时候别再喷了,其实做什么都是不容易的,尊重别人的劳动成果。
    下一步计划:继续学习XML文件布局,以及常用控件的使用,先把布局练习好,功能实现不急。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表