Activity之间传递数据

原文地址:http://blog.csdn.net/gwalking/article/details/49756193


一、一个Activity启动另一个Activity



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


二、一个Activity数据传递到另一个Activity


  1、通过setFlags(int flags)方法


  主Activity:    
     Intent intent=new Intent(MainActivity.this,SecondActivity.class);
     intent.setFlags(1000);
     startActivity(intent);


  第二个Activity:
    //获得setFlag传递的整形数据
    int flags=getIntent().getFlags();
    //转化为字符串
    String sFlags=String.valueOf(flags);
    textView.setText(sFlags);
   注:此方法只能传递整形的数据(一般不用于传递数据),常用方式:
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//用于添加额外的控制旗标。


  2、通过Intent.putExtra(String name, String value)方法


  主Activity:
    Intent intent=new Intent(MainActivity.this,SecondActivity.class);
    intent.putExtra("name", "zhangsan");
    intent.putExtra("age", "23");
    startActivity(intent);




  第二个Activity:
    Intent intent=getIntent();
    String name=intent.getStringExtra("name");//String 类型是实现了序列化的
    String age=intent.getStringExtra("age");
    textView.setText("name:"+name+"\nage:"+age);
  注:此方法对于没有实现序列化接口的类型无法使用,如Integer、Double、Float、Short


  3、通过Bundle绑定数据方法(推荐使用)


  主Activity:
    Bundle bundle=new Bundle();
    bundle.putString("name", "张三");
    bundle.putInt("age", 26); //int类型也可以


    Intent intent=new Intent(MainActivity.this,ThridActivity.class);
    //使用bundle传递数据
    intent.putExtras(bundle);
    startActivity(intent);


  第二个Activity:
    Bundle bundle=this.getIntent().getExtras();
    String name=bundle.getString("name");
    int age=bundle.getInt("age");
    textView.setText("name:"+name+"\nage:"+age);
  注:此方法最常用。


三、跳转Activity返回数据到主Activity


    主Activity:
    Bundle bundle=new Bundle();
    bundle.putString("userName", "zhangsan");
    bundle.putInt("userAge", 100);
 
    Intent intent=new Intent(MainActivity.this,ForthActivity.class);
    intent.putExtras(bundle);
    startActivityForResult(intent, 1); //


    第二个Activity:
    Intent intent=new Intent();
    intent.putExtra("backData", "这是返回主Activity的数据");
    setResult(RESULT_OK, intent);//回传数据到主Activity
    finish(); //此方法后才能返回主Activity



    主Activity接收回传数据,重写onActivityResult()方法:
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     // TODO Auto-generated method stub
     switch (requestCode){
     case RESULT_OK:
          Bundle bundle=data.getExtras();
          String str=bundle.getString("backData");
              Toast.makeText(MainActivity.this, str, 1).show();
          break;
    
     default:
          break;
     }


四、Activity传递对象


    主Activity:
    person=new Person();
    person.setName("zhangsan");
    person.setSex("male");
    person.setAge(80);

    Bundle bundle=new Bundle();
    bundle.putSerializable("person", person);//该方法传递对象
                                             //或者putParcelable(key,object)方法


    Intent intent=new Intent(MainActivity.this,FiveActivity.class);
    intent.putExtras(bundle);
    startActivity(intent);


    第二个Activity:
    Intent intent=getIntent();
    Bundle bundle=intent.getExtras();
    Person person=(Person) bundle.getSerializable("person");//获得传递的对象


    tv.setText(person.toString());


    对象Person方法://要实现Serializable接口,定义变量及方法省略
     public class Person implements Serializable{  }





  总结:
    a. startActivity():跳转到目标页面,若想跳回当前页面,必须再一次使用startActivity()。
    b. startActivityForResult():可一次性完成返回跳转,Activity可接收返回数据。
    c. 可以通过Bundle传递对象,但传递的对象要实现Serializable接口。

猜你喜欢

转载自blog.csdn.net/cdaimadada/article/details/79630025