andriod activity 之间的传值的几中方法,你知道几种?
今天总结几种Android中activity传值的几种方式,看看有没有遗漏的,欢迎大家补充。
1、intent传值
ActivityA 传值
Intent intent = new Intent(); intent.putExtra("name", "bfw"); intent.putExtra("age", 50); intent.putExtra("IQ", 200.0f); intent.setClass(MainActivity.this, SecondActivity.class); MainActivity.this.startActivity(intent);ActivityB 接受
Intent intent = getIntent(); String name = intent.getStringExtra("name"); int age = intent.getIntExtra("age", 0); float IQ = intent.getFloatExtra("IQ", 0.0f); textview2.setText("name:"+name+",age:"+age+",IQ:"+IQ);
注意:如果传对象的话,对象类要实现Parclelable接口
2、全局对象Application传值
自定义一个类MyApp继承Application 并重写它的onCreate()方法,将需要传递的值以成员变量的方式定义在MyApp 类中并提供getter和setter函数
在功能清单文件中指定自定义的全局应用程序application节点中指定android:name=".MyApp"
在MainActivity 中得到自定义的Appllication类型的子类对象MyApp类型的对象
ActivityA 传值
MyApp myApp=(MyApp)this.getApplication(); myApp.setName("xxx"); myApp.setAge(20) myApp.setDog(dog);ActivityB 接受
MyApp myApp=(MyApp)this.getApplication(); xxx=myApp.getName() age=myApp.getAge() dog=myApp.getDog()
3、startActivityForResult传值
调用流程:
主界面A里面启动购买界面B,也就是在A里面调用startActivityForResult
B界面中完成购买后,使用setResult将2000的结果保存,该结果会随着B调用finish自动返回给A
A界面onActivityResult方法会在B调用finish时被自动回调,接收B里面的参数,然后进行数据操作。
该方法无差别接收所有使用startActivityForResult启动的界面finish时返回的值。通过参数区分每个不同的startActivityForResult
ActivityA 传值
startActivityForResult(intent, 38);
A回调
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Bundle bundle = data.getExtras(); String name = bundle.getString("name"); int age = bundle.getInt("age"); float weight = bundle.getFloat("weight"); Toast.makeText(MainActivity.this, name+age+weight, Toast.LENGTH_LONG).show(); super.onActivityResult(requestCode, resultCode, data); }ActivityB 接受
Intent data = new Intent(); data.setClass(SecondActivity.this, MainActivity.class); Bundle bundle = new Bundle(); bundle.putString("name", "张无忌"); bundle.putInt("age", 20); bundle.putFloat("weight", 120.5f); data.putExtras(bundle); setResult(250, data); finish();4、bundle
ActivityA 传值
Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("name", "乔峰"); bundle.putInt("age", 40); bundle.putFloat("weight", 70.4f); intent.putExtras(bundle); intent.setClass(MainActivity.this, SecondActivity.class); startActivity(intent);ActivityB 接受
Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String name = bundle.getString("name"); int age = bundle.getInt("age"); float weight = bundle.getFloat("weight"); textview.setText(name+","+age+","+weight);
网友评论0