Android Intent传值和Bundle传值的异同
2016-11-13 22:47
351 查看
Intent 和Bundle有什么样的区别,既然Intent可以传值 为什么还搞个Bundle传值?
Intent可以携带的数据类型:
bundle可以携带的数据类型:
从下面这个例子中,我们就可以看出不同了。 我现在要从A界面将值经由B界面传到C界面 ,先来看看只用intent来传值
MainActivity:
这样的话 我就需要写2个Intent 如果你还要涉及的传值的话 你的Intent就要写两遍添加值的方法 那么 如果我用1个Bundle 直接把值先存里边 然后再存到Intent中 不就更简洁吗?
下面使用bundle来传值
MainActivity:
可以看到,如果MainActivity中需要传给CActivity的值非常多的时候,适用bundle封装下数据还是很方便的。
Intent和Bundle都是用于在不同Activity之间传递数据。但是在某些方面有所不同。首先,如果你想对数据进行灵活的操作,可选择Bundle。再者,Bundle可对对象进行操作,而Intent是不可以。Bundle相对于Intent拥有更多的接口,用起来比较灵活,但是使用Bundle也还是需要借助Intent才可以完成数据传递总之,Bundle旨在存储数据,而Intent旨在传值。
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旨在传值。
相关文章推荐
- Android中Intent和Bundle传递数据的异同
- android开发基础:Intent与Bundle的使用,实现页面跳转及信息传递
- Android用Intent和Bundle传list
- 安卓学习之--android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
- 在Android中通过Intent使用Bundle传递对象
- Android中intent传递对象和Bundle的用法
- Android Intent和Bundle机制实例详解
- android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
- android intent 用bundle传递数据
- Android用Intent和Bundle传list
- Android Intent和Bundle机制实例详解
- Android用Intent和Bundle传list
- Android心得9--Bundle类和Intent意图
- android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
- Android中Intent传值和Bundle传值两者的不同
- Android开发——Intent和Bundle的区别
- Android窗体之间的传值 Intent Bundle
- Android中Activity与Service通信——Broadcast、Receiver、Intent、Bundle
- Android中Intent与Bundle 在传值时有什么不同
- android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)