您的位置:首页 > 其它

基础之Intent向下,向上一个活动个传递数据

2016-03-08 23:52 459 查看
向下传数据

aActivity

String data = "Hello  bActivity";
Intent intent = new Intent(aActivity.this, bActivity.class);
intent.putExtra("adata", data);
startActivity(intent);

bActivity中可直接得到intent,神奇,说对key就给你值了 从intent中getkey类型的Extra就返回a存的数据了

Intent intent = getIntent();
String adata = intent.getStringExtra("adata");
Toast.makeText(this,adata,Toast.LENGTH_SHORT).show();


向上传数据

a中

Intent intent = new Intent(aActivity.this, bActivity.class);
startActivityForResult(intent,1);


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
if(resultCode == RESULT_OK) {
String data_b = data.getStringExtra("data_b");
Toast.makeText(this,data_b,Toast.LENGTH_SHORT).show();
}
break;
}
}


findViewById(R.id.btn_b).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_b", "Hello a");
setResult(RESULT_OK, intent);
finish();
}
});
}

@Override
public void onBackPressed() {//按下返回键达到同样的效果
Intent intent = new Intent();
intent.putExtra("data_b", "Hello a");
setResult(RESULT_OK, intent);
finish();
}


-----------------------------------------------------------------

如果传递数据量大的话,可以把数据都放在一个类中

public class Person implements Serializable{

private int age;

private String name;

private String adress;

public Person(int age,String name,String adress){

this.name=name;

this.adress=adress;

this.age=age;

}

public String toString(){ //重写toString方法

return "[name="+name+"age+"+age+"adress+"+adress+" ]"

}

}

传入数据

Intent intent =new Intent(MainActivity.this,SecondActivity.class);

Bundle bundle=new Bundle();

Person person=new Person(20,"xiaoming","beijing");

bundle.putSerializable("key",person);

intent.putExtras(bundle);

startActivity(intent);

接收数据

Intent intent=getIntent();

Person person=(Person)intent.getSerializableExtra("key");

---------------------------------------------------------------------------------------------------------

传递一个bitmap对象

Intent intent=new Intent(MainActivity.this,SecondActivity.class);

Bundle bundle=new Bundle();

Bitmap bitmap=BitmapFactory.decodeResource(getResource(),R.drawable.ic_launcher);

bundle.putParcelable("key",bitmap);

intent.putExtra(bundle);

startActivity(intent);

接收bitmap

Intent intent=getIntent();

Bitmap bitmap=intent.getParcelableExtra("key");

imageView.setImageBitmap(bitmap);

传递数据

传入

Intent intent =new Intent(MainActivity.this,SecondActivity.class);

intent.putExtra("key","stringValue");

intent,putExtra("key2",Int);

startActivity(intent);

取出

Intent intent =getIntent();

intent.getStringExtra("key");

intent.getIntExtra("key2",0);

通过Bundle传递数据

传入

Intent intent=new Intent(MainActivity.this,SecondActivity.class);

Bundle bundle=new Bundle();

bundle.putString("key","stringValue");

bundle.putInt("key2",Int);

intent.putExtra(bundle);

startActivity(intent);

接收同上

-----------------------------------------------------------------------------------------------------------

bundle传递数据大于0.5M会抛出传输数据过大异常;

在传输大量数据的时候也有可能抛出TransactionTooLargeException异常,解决办法是减少bundle传输的数据量

task(任务)就是activities的序列集合

back stack(后台任务栈)对activities进行一系列的管理、打开、关闭

通过在Manifest中为activtiy注册信息时添加:process
即可分配不同的进程名;

使用activity的getTaskId()方法可以获得当前应用程序的taskId,同一个应用程序下的不同activity默认情况下的taskId都是相同的;

通过在DOS控制台中输入adb
shell dumpsys activity命令查看activity的运行情况:

Running activities下就是当前活动的Activity

Recent tasks下是模拟器上曾经运行过的程序,显示为程序程序包的名称
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: