`

在Activity之间传递参数

 
阅读更多

1.传递简单数据

2.传递数据 包Bundle

3.传递值对象

4.获取Activity的返回参数

 

1.传递简单数据

在Activity跳转时如何传递简单数据。

 

在启动活动时传递数据的思路很简单,Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了。

 

在activity_main.xml中添加一个Button,并把布局方式改为LinearLayout

新建hello.xml

在里面放入一个不显示任何内容的TextView

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/textView_1" />

MainActivity.java

 

putExtra()方法接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数才是真正要传递的数据。

 

public class MainActivity extends AppCompatActivity {

    //声明变量
    private Button button_1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //保存Activity的状态
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得对象引用
        button_1=(Button)this.findViewById(R.id.button_1);

        //注册监听器,匿名内部类
        button_1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,hello.class);
                intent.putExtra("data","Hello jikexueyuan");//传递字符串
                startActivity(intent);
            }
        });
    }
}

 在这里要新建hello.java

 

通过getIntent()方法将获取到用于启动hello的Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。在这里由于我们传递的是字符串,所以使用getStringExtra()方法来获取传递的数据,如果传递的是整型数据,则使用getIntExtra()方法,如果传递的是布尔型数据,则使用getBooleanExtra()方法,以此类推。

 

public class hello extends AppCompatActivity {

    private TextView textView_1;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hello);

        textView_1=(TextView)findViewById(R.id.textView_1);
        Intent intent=getIntent();
        textView_1.setText(intent.getStringExtra("data"));
    }
}

AndroidManifest.xml

<activity
            android:name="hello"
            android:label="@string/app_name">
        </activity>

运行效果:

当点击按钮1时:

 

2.传递数据 包Bundle

在Activity跳转时如何传递复杂的数据。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //声明变量
    private Button button_2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //保存Activity的状态
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得对象引用
        button_2=(Button)this.findViewById(R.id.button_2);

        //注册监听器,匿名内部类
        button_2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,new_main.class);
                Bundle bundle=new Bundle();
                bundle.putString("name","jikexueyuan");//传递字符串
                bundle.putInt("age",2);//传递整数类型参数
                bundle.putString("name1","iwen");
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
    }
}

new_main.java

public class new_main extends AppCompatActivity {

    private TextView textView_2;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_main);

        textView_2=(TextView)findViewById(R.id.textView_2);
        Intent intent=getIntent();
        Bundle data=intent.getExtras();
        textView_2.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"),
data.getInt("age"),data.getString("name1","leo")));//如若没有传入name1,则显示默认值leo
    }
}

 另一种方法:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //声明变量
    private Button button_2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //保存Activity的状态
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得对象引用
        button_2=(Button)this.findViewById(R.id.button_2);

        //注册监听器,匿名内部类
        button_2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,new_main.class);
                Bundle bundle=new Bundle();
                bundle.putString("name","jikexueyuan");
                bundle.putInt("age",2);
                bundle.putString("name1","iwen");
                //intent.putExtras(bundle);
                intent.putExtra("data",bundle);
                startActivity(intent);
            }
        });
    }
}

new_main.java

public class new_main extends AppCompatActivity {

    private TextView textView_2;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_main);

        textView_2=(TextView)findViewById(R.id.textView_2);
        Intent intent=getIntent();
        //Bundle data=intent.getExtras();
        Bundle data=intent.getBundleExtra("data");
        textView_2.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"),data.getInt("age"),data.getString("name1","leo")));
    }
}

 

3.传递值对象

在Activity跳转时如何传递自定义的值对象。

在activity_main中新添加一个button_3

新建User.class

public class User implements Serializable{

    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;
    }

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

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //声明变量
    private Button button_3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //保存Activity的状态
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得对象引用
        button_3=(Button) this.findViewById(R.id.button_3);

        //注册监听器,匿名内部类
        button_3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,ding.class);
                intent.putExtra("user",new User("jikexueyuan",2));
                startActivity(intent);
            }
        });
    }
}

ding.java

public class ding extends AppCompatActivity{

    private TextView textView_3;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ding);

        textView_3=(TextView)findViewById(R.id.textView_3);
        Intent intent=getIntent();

        User user=(User)intent.getSerializableExtra("user");
        textView_3.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
    }
}

另一种android平台提供的实现方法

User.java

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;
    }

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

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(getName());
        dest.writeInt(getAge());
    }

    public static final Creator<User> CREATOR=new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            return new User(source.readString(),source.readInt());
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };
}

 ding.java

public class ding extends AppCompatActivity{

    private TextView textView_3;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ding);

        textView_3=(TextView)findViewById(R.id.textView_3);
        Intent intent=getIntent();

        //User user=(User)intent.getSerializableExtra("user");
        User user=intent.getParcelableExtra("user");
        textView_3.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
    }
}

 

 

 

分享到:
评论

相关推荐

    两个Activity之间传递参数的代码

    本篇文章将详细讲解如何在Android的两个Activity之间传递参数,并通过给出的`LoginActivity.java`和`MainActivity.java`两个文件为例进行说明。 首先,我们要了解在Android中,有两种主要的方式来传递数据: 1. ...

    Eclipse编写的Android Activity之间简单地传递参数应用实例

    本实例将深入讲解如何在Eclipse V4.2.0环境下,使用Intent对象来实现在Android Activity之间简单地传递参数。 首先,我们需要了解Intent的作用。Intent在Android系统中扮演着消息传递的角色,它能够启动新的...

    Activity之间的相互调用与传递参数

    总结一下,Activity之间的相互调用与传递参数是Android开发中的核心技能。理解启动模式、Intent的使用、回调机制以及生命周期管理,可以帮助我们构建健壮且用户体验良好的应用程序。在实际编码时,应根据具体需求...

    Android 中Activity 之间传递参数

    Android 中Activity 之间传递参数 Android 中Activity 之间传递参数是 Android 应用程序开发中的一种常见需求。通过本文,我们将主要介绍 Android 中Activity 之间传递参数的相关资料,希望通过本文能帮助到大家,...

    Android应用:Intent打开另外一个Activity,Intent拨电话,Intent在2个Activity间传递参数

    本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的Activity,拨打电话,以及在两个Activity之间传递参数。 首先,让我们讨论如何使用Intent打开另一个Activity。在Android中,Activity是用户界面的...

    Android Activity之间的跳转以及传递参数源代码下载

    要传递参数,我们可以利用Intent的putExtra()和getExtra()方法。比如,我们想传递一个字符串: ```java // 在源Activity中设置参数 intent.putExtra("key", "value"); // 在目标Activity中获取参数 String value =...

    诠释Android中Activity间的参数互传

    本篇文章将深入探讨如何在Android的Activity之间传递参数,帮助开发者更好地理解和运用这一关键机制。 一、Intent:数据传递的载体 在Android中,Intent不仅用于启动一个Activity,还可以承载数据进行传输。我们...

    Android 开发Activity基础 启动和跳转并传递参数

    七、Activity之间的通信 除了通过Intent传递参数外,Activity间还可以通过startActivityForResult()进行回调通信,或者使用BroadcastReceiver、EventBus、LiveData等组件进行更复杂的异步通信。 总结,Android的...

    android Parcelable

    在Android开发过程中,经常要在Activity之间传递参数,使用Android系统提供的方法可以传递基本数据类型的变量,但有时候我们经常要传递一些复杂的数据类型或自定义的类,这种情况的参数无法直接传递,我们可以通过...

    Android中为应用添加多个Activity并实现参数传递案例

    在实际项目中,我们需要灵活地跳转和传递数据,以便各个Activity之间能有效地协同工作。本教程将详细讲解如何在Android中添加多个Activity以及如何实现参数传递。 首先,我们创建新的Activity。在Android Studio中...

    Fragment与Activity传递数据

    1. **创建接口**:首先,定义一个接口,通常放在Fragment类中,包含需要在Fragment和Activity之间传递的方法。 2. **实现接口**:然后,在Activity中实现这个接口。这样,当Fragment需要与Activity通信时,它可以...

    Activity跳转时传递Bitmap对象

    在不同Activity之间传递Bitmap,通常是为了进行图片显示、编辑或者处理。本篇文章将深入探讨如何在Activity跳转时传递Bitmap对象,并以一个Demo为例进行讲解。 首先,理解Bitmap的基本概念。Bitmap对象存储了图像的...

    Activity之间的值传递

    本主题将深入探讨“Activity之间的值传递”,特别是利用`ActivityResult`接口进行高效的数据通信。 Activity之间的值传递通常有两种主要方式:Intent和ActivityResult API。Intent主要用于启动另一个Activity并传递...

    Android四大组件——Activity(一)Activity之间通信及其生命周期变化

    在本篇内容中,我们将深入探讨Activity之间的通信以及它们在不同操作下的生命周期变化,并讨论如何传递回传参数。 首先,我们来看Activity之间的通信。在Android系统中,Activity可以通过Intent进行通信。Intent是...

    实验五 Android组件应用

    2. **通过Bundle在Activity之间传递参数**:Bundle是一个可以存放一系列键值对的数据容器,常用于在Intent中传递数据。 3. **切换Activity的方法**:了解如何使用Intent启动新的Activity以及如何正确地关闭当前...

    Fragment与Activity使用Bundle传递数据

    在实际开发中,经常需要在Fragment和Activity之间传递数据,这通常是通过Bundle对象来实现的。Bundle类在Android中扮演着数据容器的角色,它允许我们存储键值对的数据,并在不同组件之间共享。 首先,了解Activity...

    Activity代理框架AyoActivityNoManifest.zip

    目的在于在Activity之间传递参数时考虑序列化问题,适用于进程内通信提供了一个轻量级的OnActivityResult机制(OnResultCallback,使用方式基本和OnActivity不一样)状态栏一体化的简单封装Activity和Fragment状态...

Global site tag (gtag.js) - Google Analytics