Android学习之Activity传参

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Android学习之Activity传参相关的知识,希望能为你提供帮助。
【Android学习之Activity传参】一、传参的三种方法
场景分两步:
1、从第一个Activity传递参数到第二个Activity,接受并显示。
2、第二个Activity文本框输入信息,并传到第一个Activity。
传参前需要先定义Intent

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

传参的集中方法
1、putExtra
类似是键值对,第二个参数可以传不同类型的值
Android学习之Activity传参

文章图片

a)赋值
i.putExtra("data","Hellow,zhangsan");

b)取值
i.getStringExtra("data")

 
2、使用Bundle
根据类型不同使用不同的put方法
Android学习之Activity传参

文章图片

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

b)取值:
Bundle data=https://www.songbingjia.com/android/i.getExtras(); data.getString("name");

 
3、使用对象
a)定义一个User对象,包含name和age属性
public class Userimplements Parcelable{ private String name; private int age; publicint GetAge(){ return this.age; } publicvoid SetAge(int age){ this.age=age; }publicString GetName(){ return this.name; } publicvoid 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 staticfinalCreator< 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(); } }); } }

 
运行下,大功告成。
 

    推荐阅读