Android -- Activity值传递

我们需要创建2个Activity,一个是A,一个是B。

简单的值传递

A的activity组织要传输给B的数据。

Intent i = new Intent(AMainActivity.this,BMainActivity.class);此行代码创建Intent对象,然后用于传输数据。

package com.example.testapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class AMainActivity extends Activity {

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

        findViewById(R.id.button1).setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent i = new Intent(AMainActivity.this,
                                BMainActivity.class);
                        // 传参数
                        i.putExtra("name", "gaopeng");
                        startActivity(i);
                    }
                });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.amain, menu);
        return true;
    }

}

B的Activity接收A传过来的数据,通过i.getStringExtra(“name”)获取数值。

package com.example.testapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class BMainActivity extends Activity {

    private TextView t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bmain);
        t = (TextView) findViewById(R.id.tv);
        Intent i = getIntent();
        t.setText(i.getStringExtra("name"));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.bmain, menu);
        return true;
    }

}

数据传输包Bundle

A的Activity,代码中我们用到了Bundle类,有点类似我们java中的map集合的用法。

使用putExtras或者putExtra方法将数据包放入到传输对象中。两个方法区别,一个是直接放入,另外一个是将数据包起一个别名,类似于KV的存储格式。

package com.example.testapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class AMainActivity extends Activity {

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

        findViewById(R.id.button1).setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent i = new Intent(AMainActivity.this,
                                BMainActivity.class);
                        Bundle b = new Bundle();
                        b.putString("name", "gaopeng");
                        b.putInt("age", 28);
//                      i.putExtras(b);
                        i.putExtra("user", b);
                        startActivity(i);
                    }
                });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.amain, menu);
        return true;
    }

}

B的Activity,通过getBundleExtra或getExtras方法渠道Bundle对象,然后按照存放时候的名字,取出数值。

package com.example.testapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class BMainActivity extends Activity {

    private TextView t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bmain);
        t = (TextView) findViewById(R.id.tv);
        Intent i = getIntent();
        Bundle b = i.getBundleExtra("user");
//      Bundle b = i.getExtras();
        t.setText("name=" + b.getString("name") + ",age=" + b.getInt("age"));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.bmain, menu);
        return true;
    }

}

传输对象

既然是传输对象,那么我们就需要创建一个对象类。

对象类需要实现序列化接口,这里我实现的是Serializable接口,Android有自带的序列化接口Parcelable,下一篇博文,我详细说明差异及用法。

package com.example.testapp;

import java.io.Serializable;

import android.os.Parcel;
import android.os.Parcelable;

public class User implements Serializable {
    // public class User implements Parcelable{

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

A的Activity,

package com.example.testapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class AMainActivity extends Activity {

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

        findViewById(R.id.button1).setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent i = new Intent(AMainActivity.this,
                                BMainActivity.class);
                        i.putExtra("user", new User("lijingwei", 25));
                        startActivity(i);
                    }
                });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.amain, menu);
        return true;
    }

}

B的Activity,通过getSerializableExtra获取对象。这种方式在我们以后的开发中应该会经常被用到。符合我们java面向对象的开发。

package com.example.testapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class BMainActivity extends Activity {

    private TextView t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bmain);
        t = (TextView) findViewById(R.id.tv);
        Intent i = getIntent();
        User user = (User) i.getSerializableExtra("user");
        t.setText("name=" + user.getName() + ",age=" + user.getAge());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.bmain, menu);
        return true;
    }

}

附上运行时的截图

A的Activity界面

B的Activity界面

时间: 2024-11-12 19:54:41

Android -- Activity值传递的相关文章

android activity之间传递返回值

activity A,跳转至 Activity B ,A传参数user_name给B,然后B再返回修改后的参数user_name给A 首先A传user_name给B Intent input_B = new Intent(UserInfoActivity.this,ForInputActivity.class); input_driving_age.putExtra("user_name", "哈哈哈"); startActivityForResult(input_

Android Handler值传递(文)

发送消息: public static class TimeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String time = intent.getStringExtra("time"); String contentDate = formatDate(time); Message msg = handler.obtain

Application值传递。

1.layout下面的布局 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layou

Android笔记:Activity之带值传递

   Activty之间的传递数据 之前学习过如何启动一个activity,在一些场合不单需要启动另一个activity,还需要得到返回的结果.而且有些时候更经常的操作时启动另一个activity时带上一些值. 1.定义一个Intent,并为该Intent指定即将被启动的Activity      2.调用startActivityForResult(Intent intent,int requestCode)跳转并标记requestCode    3.重写onActivityResult(in

Android笔记(二十) Activity中的跳转和值传递

我们知道,一个APP是由若干个Activity组成的,那么各个Acitivity中肯定需要进行跳转以及传递数值以保证App的运行,现总结一下多个Activity之间的跳转和值传递. 简单的跳转 AndroidManiFest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/andro

【Android基础】利用Intent在Activity之间传递数据

前言: 上一篇文章给大家聊了Intent的使用方法.怎样用Intent启动Activity和隐式Intent.这一篇文章给大家聊聊怎样利用Intent在Activity之间进行沟通. 从一个Activity获取返回结果: 启动一个Activity不不过startActivity(Intent intent)一种方法.你也能够通过startActivityForResult()启动一个Activity而且在它退出的时候收到一个返回结果. 比方.你能够调用系统相机在你的应用中,拍了一张照片,然后返回

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

Android之Activity之间传递对象

在很多时候,我们需要在Activity之间传递对象,比如当你点击了某列表的item,需要传递给下一个Activity该对象,那我们需要该怎么做呢? Android支持两种传递对象的方式,一种是bundle.putSerializable方式,一种是bundle.putParcelable. 那么下面我们就用一个例子来实践Activity传递对象: 1.首先建立两个类,一个Teacher类表示老师,一个Student类表示学生.内容分别如下: <span style="font-size:1

Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

http://blog.csdn.net/cjjky/article/details/6441104 在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key, Object);其中前面一种方法中的Object要实现Serializable接口,后面一种方法中的Object要实现Parcelable接口.下面我们以一个完整的例子来说明. 1.新建一个A