android_activity的数据传递

简单的数据传递

简单数据概要

    intent.putExtra(key , value);

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

    Intent intent = getIntent();
    intent.getXXXExtra(key); // xxx ---- 指的是早前传递的数据类型

需求举例:把MainActivity中的数据,传递到ResultActivity中

先提醒一下:因为页面的代码较多,并且简单,就不再罗列出来了。

public class MainActivity extends Activity {

    private TextView tvResult;
    private EditText etName;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvResult = (TextView) findViewById(R.id.tv_result);
        etName = (EditText) findViewById(R.id.et_name);
    }

    //页面点击触发该事件,让他跳转到指定的ResultActivity 中
    public void calc(View v){
        String name = etName.getText().toString().trim();       
        String str = "我是简单的数据";

        Intent intent = new Intent(this , ResultActivity.class);

        //我们把数据存放在Intent中,
        //让intent带数据过去这里的关键方法就是putExtra
        //该方法有一点类似: Map 键值对
        //例如:aa是键,str是值。
        intent.putExtra("aa", str);
        intent.putExtra("number", 13);
        intent.putExtra("flag", false);

        startActivity(intent);

    }


}

public class ResultActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);



        //  这个intent对象不再是new出来的,而是使用getIntent()方法获取,
        //意思是:是那个intent打开了我,我就获取谁。
        Intent intent = getIntent();

        //getXXXExtra("键名"),是根据前面一个Intent定义好的键,获取到相应的值
        //XXX表示数据类型
        String value = intent.getStringExtra("aa");
        int number = intent.getIntExtra("number1", 0);
        boolean  flag = intent.getBooleanExtra("flag1" , true);
    //--------------------------------------------------------------
        //显示数据
        Toast.makeText(this, "number=="+number+"---flag="+flag, 0).show();
        TextView tvResult = (TextView)findViewById(R.id.tv_result);

        tvResult.setText(value);
    }
}

AndroidManifest.xml

     <activity
             //theme是主题,这里的主题的意思就是说:在我的手机也面上,不要有头部条
           android:theme="@android:style/Theme.Light.NoTitleBar"
           //登记注册,我们自己写activity
            android:name="com.itheima.rp.ResultActivity">
   </activity>

复杂的数据

复杂的数据的传递一般就是一个javaBean传递,
这个javaBean的传递是有要求的:
这个javaBean必须实现一个Serializable或者Parcelable
(Parcelable是谷歌对Serializable的针对自己的优化)

需求举例:在一个activity中封装好javabean的数据传递到下一个activity

StudentBean

public class Student implements Serializable/*Parcelable*/{

    public String name ;
    public int age ; 

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }




     @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }



/*
//如果实现的是Parcelable,必须要写下面的代码,
    public int describeContents() {
         return 0;
     }

     //把数据写到包里面 -- 读写顺序要一致
     public void writeToParcel(Parcel out, int flags) {
         out.writeString(name);
         out.writeInt(age);
     }

     public static final Parcelable.Creator<Student> CREATOR
             = new Parcelable.Creator<Student>() {
         //从parcel转化数据,形成一个student对象
         public Student createFromParcel(Parcel in) {
             return new Student(in);
         }

         public Student[] newArray(int size) {
             return new Student[size];
         }
     };

     private Student(Parcel in) {
         name =  in.readString();
         age = in.readInt();
     }
*/

}

MainActivity

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void click(View v){

        //跳转过去,传递一个对象 javaBean
        ArrayList<Student> stus = new ArrayList<Student>();
        Student stu1 = new Student("zhangsan", 18);
        Student stu2 = new Student("zhangsan1", 118);
        Student stu3 = new Student("zhangsan2", 128);


        stus.add(stu1);
        stus.add(stu2);
        stus.add(stu3);

        //传递上下文, 传递跳转哪一个类
        Intent intent = new Intent(this ,OtherActivity.class);  

        //intent.putExtra("stu1",stu1);只是传递单个javabean

        //这里一样可以传递集合,看源码知道,ArrayList也实现了
        intent.putExtra("stus", stus);



        //如果javaBean实现的是Parcelable,那么按照下面来传递一个集合
        //intent.putParcelableArrayListExtra("stus", stus);
        startActivity(intent);

    }
}

OtherActivity

public class OtherActivity extends Activity {

    private static final String TAG = "OtherActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);

        Intent intent = getIntent();
//单个javabena的接受,并且这个javaBean是实现了Serializable的
//      Student stu = (Student) intent.getSerializableExtra("stu");


//这个javaBean实现Parcelable的,采用如下的方法
//      ArrayList<Student> stus = intent.getParcelableArrayListExtra("stus");

        //接受集合的javaBean,并且实现Serializable
        ArrayList<Student> stus = (ArrayList<Student>) intent.getSerializableExtra("stus");

        for (Student stu : stus) {
            Log.d(TAG, "STU=="+stu.toString());
        }
    }


}

AndroidManifest.xml

  <activity android:name="com.itheima.data.OtherActivity"></activity>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值