首页 > 代码库 > Android学习之Activity传参

Android学习之Activity传参

一、传参的三种方法

场景分两步:

1、从第一个Activity传递参数到第二个Activity,接受并显示。

2、第二个Activity文本框输入信息,并传到第一个Activity。

传参前需要先定义Intent

Intent i=new Intent(MainActivity.this,TheAty.class);//参数一当前Activity,参数二跳转Activity

传参的集中方法

1、putExtra

类似是键值对,第二个参数可以传不同类型的值

技术分享

a)赋值

i.putExtra("data","Hellow,zhangsan");

b)取值

i.getStringExtra("data")

 

2、使用Bundle

根据类型不同使用不同的put方法

技术分享

 

a)赋值

Bundle b=new Bundle();b.putString("name","hello,张三");
i.putExtras(b);

b)取值:

Bundle data=http://www.mamicode.com/i.getExtras();"name");

 

3、使用对象

a)定义一个User对象,包含nameage属性

public class User  implements Parcelable{    private String name;    private int age;    public  int GetAge(){        return this.age;    }    public  void SetAge(int age){        this.age=age;    }    public  String GetName(){        return this.name;    }    public  void SetName(String name){        this.name=name;    }    public User(String name,int age){        this.name=name;        this.age=age;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int i) {        dest.writeString(GetName());        dest.writeInt(GetAge());    }    public static  final  Creator<User> CREATOR=new Creator<User>() {        @Override        public User createFromParcel(Parcel source) {            return new User(source.readString(),source.readInt());        }        @Override        public User[] newArray(int size) {            return new User[size];        }    };}

这里采用Android的Parcelable序列号接口,重写describeContents和writeToParcel方法,定义常量CREATOR。当然也可以用Java的Serializable接口,实现代码更少。

 

b)传参

i.putExtra("user",new User("zhangsan",18));

c)取值

User u=(User)i.getParcelableExtra("user");tv.setText(String.format("User info(name=%s,age=%d)",u.GetName(),u.GetAge()));

 

 

二、实现的代码和步骤:1、先定义第一个Activity

加上button和TextView

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.lisheng.sendargs.MainActivity">    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content" android:id="@+id/btnStartAty"  android:text="启动另一个Activtiy"/>    <TextView        android:text=""        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/textView" /></LinearLayout>

 

2、第一个Activity后代码台实现

public class MainActivity extends AppCompatActivity {    private TextView textView;//定义TextView    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView=(TextView)findViewById(R.id.textView);//根据ID获得TextView对象        findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View view) {                Intent i=new Intent(MainActivity.this,TheAty.class);                i.putExtra("user",new User("zhangsan",18));                startActivityForResult(i,0);            }        });    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        textView.setText("返回的数据:"+data.getStringExtra("data"));    }}

这里需要注意的有点

1)获得元素是根据元素ID  findViewById(R.id.textView);

2)给Button绑定点击事件: setOnClickListener(new View.OnClickListener(){}

3)要想获取第二个Activity返回的值,需要重写onActivityResult方法

 

3、第二个Activity页面

定一个TextView用于显示接受第一个传来的值;定义一个EditText,写入值;定义一个Button;

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_the_aty"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.lisheng.sendargs.TheAty">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Hello World!"  android:id="@+id/tv"/>    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:inputType="textPersonName"        android:text="Name"        android:ems="10"        android:id="@+id/editText" />    <Button        android:text="Send Back"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/button" /></LinearLayout>

 

4、第二个Activity后台代码实现

public class TheAty extends AppCompatActivity {    private TextView tv;    private EditText editText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_the_aty);        Intent i= getIntent();        tv= (TextView) findViewById(R.id.tv);        editText=(EditText)findViewById(R.id.editText);        User u=(User)i.getParcelableExtra("user");//获取传入的User对象        tv.setText(String.format("User info(name=%s,age=%d)",u.GetName(),u.GetAge()));//显示到TextView        findViewById(R.id.button).setOnClickListener(new View.OnClickListener(){            //定义Button点击事件            @Override            public void onClick(View view) {                Intent i=new Intent();                i.putExtra("data",editText.getText().toString());                setResult(1,i);                finish();            }        });    }}

 

运行下,大功告成。

 

Android学习之Activity传参