一、传参的三种方法
场景分两步:
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=newBundle();
b.putString("name","hello,张三");
i.putExtras(b);
b)取值:
Bundle data=i.getExtras();
data.getString("name");
3、使用对象
a)定义一个User对象,包含name和age属性
public class User implementsParcelable{privateString name;private intage;public intGetAge(){return this.age;
}public void SetAge(intage){this.age=age;
}publicString GetName(){return this.name;
}public voidSetName(String name){this.name=name;
}public User(String name,intage){this.name=name;this.age=age;
}
@Overridepublic intdescribeContents() {return 0;
}
@Overridepublic void writeToParcel(Parcel dest, inti) {
dest.writeString(GetName());
dest.writeInt(GetAge());
}public static final Creator CREATOR=new Creator() {
@OverridepublicUser createFromParcel(Parcel source) {return newUser(source.readString(),source.readInt());
}
@Overridepublic User[] newArray(intsize) {return newUser[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
android:layout_width="wrap_content"android:layout_height="wrap_content" android:id="@+id/btnStartAty" android:text="启动另一个Activtiy"/>
android:text=""android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/textView" />
2、第一个Activity后代码台实现
public class MainActivity extendsAppCompatActivity {private TextView textView;//定义TextView
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.textView);//根据ID获得TextView对象
findViewById(R.id.btnStartAty).setOnClickListener(newView.OnClickListener(){
@Overridepublic voidonClick(View view) {
Intent i=new Intent(MainActivity.this,TheAty.class);
i.putExtra("user",new User("zhangsan",18));
startActivityForResult(i,0);
}
});
}
@Overrideprotected void onActivityResult(int requestCode, intresultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);
textView.setText("返回的数据:"+data.getStringExtra("data"));
}
}
这里需要注意的有点
1)获得元素是根据元素ID findViewById(R.id.textView);
2)给Button绑定点击事件:setOnClickListener(newView.OnClickListener(){}
3)要想获取第二个Activity返回的值,需要重写onActivityResult方法
3、第二个Activity页面
定一个TextView用于显示接受第一个传来的值;定义一个EditText,写入值;定义一个Button;
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!" android:id="@+id/tv"/>
android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="textPersonName"android:text="Name"android:ems="10"android:id="@+id/editText" />
android:text="Send Back"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/button" />
4、第二个Activity后台代码实现
public class TheAty extendsAppCompatActivity {privateTextView tv;privateEditText editText;
@Overrideprotected voidonCreate(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(newView.OnClickListener(){//定义Button点击事件
@Overridepublic voidonClick(View view) {
Intent i=newIntent();
i.putExtra("data",editText.getText().toString());
setResult(1,i);
finish();
}
});
}
}
运行下,大功告成。