Android Intent传值和Bundle传值的异同

Intent 和Bundle有什么样的区别,既然Intent可以传值 为什么还搞个Bundle传值?

Intent可以携带的数据类型:




bundle可以携带的数据类型:





从下面这个例子中,我们就可以看出不同了。 我现在要从A界面将值经由B界面传到C界面 ,先来看看只用intent来传值

MainActivity:

package com.example.yk.intentandbundle;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn= (Button) findViewById(R.id.btn);

        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        Intent intent=new Intent(MainActivity.this,BActivity.class);
        intent.putExtra("String","MainActivity中的值");
        intent.putExtra("int",11);
        startActivity(intent);
    }
}
BActivity:

package com.example.yk.intentandbundle;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class BActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn;
    private String string;
    private int key;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        btn= (Button) findViewById(R.id.btn_b);

        //需要先接收MainActivity中传过来的值
        Intent intent = getIntent();

        string = intent.getStringExtra("String");//MainActivity中的值

        key = intent.getIntExtra("int",0);//11

        //点击按钮将MainActivity中传过来的值传给CActivity
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        Intent intent=new Intent(BActivity.this,CActivity.class);
        intent.putExtra("String1",string);
        intent.putExtra("int1",key);
        //可以传给CActivity额外的值
        intent.putExtra("boolean",true);
        startActivity(intent);
    }
}
CActivity:

package com.example.yk.intentandbundle;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class CActivity extends AppCompatActivity {
    private TextView textView1,textView2,textView3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c);
        textView1= (TextView) findViewById(R.id.text1);
        textView2= (TextView) findViewById(R.id.text2);
        textView3= (TextView) findViewById(R.id.text3);

        Intent intent = getIntent();
        textView1.setText(intent.getStringExtra("String1"));
        textView2.setText(intent.getIntExtra("int1", 0)+"");
        if(intent.getBooleanExtra("boolean",false)){
            textView3.setText("true");
        }
    }
}
结果图:

这样的话 我就需要写2个Intent 如果你还要涉及的传值的话 你的Intent就要写两遍添加值的方法 那么 如果我用1个Bundle 直接把值先存里边 然后再存到Intent中 不就更简洁吗?

下面使用bundle来传值

MainActivity:

package com.example.yk.intentandbundle;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn= (Button) findViewById(R.id.btn);

        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        Intent intent=new Intent(MainActivity.this,BActivity.class);
        Bundle bundle=new Bundle();
        bundle.putString("String","MainActivity中的值");
        bundle.putInt("int",11);
        intent.putExtra("bundle",bundle);
        startActivity(intent);
    }
}
BActivity:

package com.example.yk.intentandbundle;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class BActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn;
    private Bundle bundle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        btn= (Button) findViewById(R.id.btn_b);

        //需要先接收MainActivity中传过来的值
        Intent intent = getIntent();
        bundle=intent.getBundleExtra("bundle");

        //点击按钮将MainActivity中传过来的值传给CActivity
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        Intent intent=new Intent(BActivity.this,CActivity.class);
        //可以传给CActivity额外的值
        bundle.putBoolean("boolean",true);
        intent.putExtra("bundle1",bundle);
        startActivity(intent);
    }
}
CActivity:

package com.example.yk.intentandbundle;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class CActivity extends AppCompatActivity {
    private TextView textView1,textView2,textView3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c);
        textView1= (TextView) findViewById(R.id.text1);
        textView2= (TextView) findViewById(R.id.text2);
        textView3= (TextView) findViewById(R.id.text3);

        Intent intent = getIntent();
        Bundle bundle = intent.getBundleExtra("bundle1");
        textView1.setText(bundle.getString("String"));
        textView2.setText(bundle.getInt("int",0)+"");
        if(bundle.getBoolean("boolean",false)){
            textView3.setText("true");
        }
    }
}
结果都是一样,就不展示效果图了。
可以看到,如果MainActivity中需要传给CActivity的值非常多的时候,适用bundle封装下数据还是很方便的。

Intent和Bundle都是用于在不同Activity之间传递数据。但是在某些方面有所不同。首先,如果你想对数据进行灵活的操作,可选择Bundle。再者,Bundle可对对象进行操作,而Intent是不可以。Bundle相对于Intent拥有更多的接口,用起来比较灵活,但是使用Bundle也还是需要借助Intent才可以完成数据传递总之,Bundle旨在存储数据,而Intent旨在传值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值