Android 学习之路 1:Activity之间传递数据的四种方式

传递数据

  • 新建 Activity

在项目中右键,选择 New,继续选择中下方的 Activity,最后是 Blank Activity。

此时 Android Studio 会为我们自动添加一个对应的布局文件,为布局文件中的 TextView 添加 ID,以便后续使用。

  • 用Intent 发送数据

在主布局文件中新建一个 Button 控件,并在主类中定义它,然后为它设置 Click 的监听事件。

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this,Main2Activity.class);
                i.putExtra("Thanks","Thank you for reading my blog.");
                startActivity(i);
            }
        });
    }
  • 用 Intent 接收数据

接下来再之前创建的 Activity 中同样新建一个 Intent 进行接受即可。和发送试用的 putExtra 类似,接受也可以用 getStringExtra 。当然了,正对不同的数据类型可以用不同的方法。

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.tv);
    tv.setText(i.getStringExtra("Thanks"));
}                                                                                            

传递 Bundle 包

在两个 Activity 之间也可以用 Bundle 包来进行数据的传递,相比上一种方式,这一种可以包含更多的数据,你可以将其认为是一个集合,这也正符合“包”的概念。

  • 新建 Bundle
  • Bundle 可以嵌套 Bundle
  • 对 Intent 对象使用 putExtras 方法
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,Main2Activity.class);
            Bundle a = new Bundle();
            a.putString("Thanks", "Thank you for reading my blog.");
            Bundle b = new Bundle();
            b.putString("Android","Google");
            b.putString("Windows","Microsoft");
            a.putBundle("bundle",b);
            i.putExtras(a);
            startActivity(i);
        }
    });
}
  • 根据相应的 Key 值获取相应的Bundle数据
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);                                    

    Intent i = getIntent();                                                     

    Bundle a2 = i.getExtras();                                                  

    tv = (TextView)findViewById(R.id.tv);                                       

    tv.setText(String.format("%s Android属于%s,Windows属于%s",
            a2.getString("Thanks"),
            a2.getBundle("bundle").getString("Android"),
            a2.getBundle("bundle").getString("Windows")));
}                                                                               

传递自定义对象

Android 开发过程中自然少不了“类”了,那么这种数据又如何传输呢。

  • 切记:一定要执行序列化,即加上“implements Serializable”
public class Source implements Serializable{
    private int source;
    private String ID;

    public int getSource() {
        return source;
    }

    public void setSource(int source) {
        this.source = source;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public Source(String ID, int source) {
        this.source = source;
        this.ID = ID;
    }
}

相应有了前面的了解,大家都可以直接猜到如何使用了,那我就不再啰嗦了。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,Main2Activity.class);
            i.putExtra("source",new Source("Player",1000));
            startActivity(i);
        }
    });
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);                  

    Intent i = getIntent();                                   

    Source s = (Source) i.getSerializableExtra("source");     

    tv = (TextView) findViewById(R.id.tv);                    

    tv.setText(String.format("ID是%s,得分是%d",
            s.getID(), s.getSource()));
}                                                             

从Activity返回数据

用户需要与应用进行交互,应用需要将用户输入的数据进行返回,所以……

在主 Activity 中定义 Button 和 TextView,前者用于导航至次 Activity , 后者用于显示返回的数据。

在次 Activity 中定义 Button 和 EditText,前者用于确认并返回至主 Activity,后者用于用户输入。

在次 Activity 中:

  • 同样用 Intent 传递数据
  • 用 setResult 设置返回结果
  • 最后用 finish
private Button button ;
private EditText editText;                                      

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);                    

    editText = (EditText)findViewById(R.id.editText);
    button = (Button)findViewById(R.id.button2);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent();
            i.putExtra("info",editText.getText().toString());
            setResult(0, i);  // 0表示成功
            finish();
        }
    });
}                                                               

在主 Activity 中:

  • 用 startActivityForResult 进行导航,并请求结果
    private Button button;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView)findViewById(R.id.textView);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this,Main2Activity.class);

                startActivityForResult(i,0);
            }
        });
    }
  • 重载 onActivityResult 方法,并通过 data 参数获取数据。
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        textView.setText(data.getStringExtra("info"));
    }

好了,Activity 之间就是这么传递数据的……

零点半了……睡觉……




本文为重复文章,仅为测试。

版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

时间: 2024-10-07 06:30:20

Android 学习之路 1:Activity之间传递数据的四种方式的相关文章

android中activity之间传递数据的3种方式

在android开发中总是需要不停的传递数据,特别是不同的Activity之间.在这里小编介绍自己所知的3种Activity的跳转方式. 第一种:静态传递数据 直接上部分代码:在第一个Activity中 Intent intent = new Intent(); intent.setClass(MainActivity.this,SecondActivity.class); SecondActivity.usrname = "jack"; SecondActivity.password

EF5(7) 后台使用SelectListItem传值给前台显示Select下拉框;mvc后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式

一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Order控制器,显示订单列表,并且在修改订单的时候,把用户的id 用 select 下拉框显示出来,并且可以提交修改数据   1.1 我们通过比较原始的方法,来把数据 传递到前台后,前台使用  循环来显示 select 并且显示是哪个元素被选中 我们在前台的cshtml中,使用 @model 命令 指定

Android学习系列之(五)Activity之间的数据传递

前言:前面我们已经掌握了 Activity 的基本使用,但是那都是在同一个 Activity 中进行操作的.那么若我们要在不同 Activity 之间进行数据交互,这又如何实现?那现在我们依旧以模拟登录注册这一个例子来进行说明 一.需求说明: 模拟用户的登录注册行为,用户注册信息后,将注册时的账号.密码这一数据传递到登陆界面. 二.代码实现: 1.布局文件代码: activity_main.xml: <?xml version="1.0" encoding="utf-8

android中使用Intent在activity之间传递数据

android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivity.this,OtherActivity.class); intent.putExtra("name", "使用Intent传递数据"); startActivity(intent); 然后再目标activity中接收数据: Intent intent=getInten

在Activity间传递数据的四种方法及返回结果

1.通用方法 使用intent的PutExtra方法传入,用getExtra等方法获得数据 主类 Intent intent=new Intent(MainActivity.this,OtherActivity.class); intent.putExtra("name", "张三"); intent.putExtra("age", 23); intent.putExtra("address", "北京")

在不同Activity传递数据(四种方式)

四种传递方法: 1.通过Intent传递数据: 2.通过静态变量传递数据: 3.通过剪切板传递数据: 4.通过全局对象传递数据: 分类介绍: 1.通过Intent传递数据: 代码如下: 布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_

iOS App之间传递数据的几种方式

UIDocumentInteractionController UIActivityViewController Shared Keychain Access Custom URL Scheme Web Service iCloud API UIPasteboard 参考 http://enharmonichq.com/sharing-data-locally-between-ios-apps/ http://stackoverflow.com/questions/9425706/share-d

Android 笔记-Fragment 与 Activity之间传递数据

Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调.下面先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3: 现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的. 一般来说,会有个宰相或者太监总管来负责皇帝口谕是

Android笔记Fragment与Activity之间传递数据

Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调.下面先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3: 现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的. 一般来说,会有个宰相或者太监总管来负责皇帝口谕是