1.传递简单数据
2.传递数据 包Bundle
3.传递值对象
4.获取Activity的返回参数
1.传递简单数据
在Activity跳转时如何传递简单数据。
在启动活动时传递数据的思路很简单,Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了。
在activity_main.xml中添加一个Button,并把布局方式改为LinearLayout
新建hello.xml
在里面放入一个不显示任何内容的TextView
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:id="@+id/textView_1" />
MainActivity.java
putExtra()方法接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数才是真正要传递的数据。
public class MainActivity extends AppCompatActivity { //声明变量 private Button button_1; @Override protected void onCreate(Bundle savedInstanceState) { //保存Activity的状态 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得对象引用 button_1=(Button)this.findViewById(R.id.button_1); //注册监听器,匿名内部类 button_1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,hello.class); intent.putExtra("data","Hello jikexueyuan");//传递字符串 startActivity(intent); } }); } }
在这里要新建hello.java
通过getIntent()方法将获取到用于启动hello的Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。在这里由于我们传递的是字符串,所以使用getStringExtra()方法来获取传递的数据,如果传递的是整型数据,则使用getIntExtra()方法,如果传递的是布尔型数据,则使用getBooleanExtra()方法,以此类推。
public class hello extends AppCompatActivity { private TextView textView_1; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.hello); textView_1=(TextView)findViewById(R.id.textView_1); Intent intent=getIntent(); textView_1.setText(intent.getStringExtra("data")); } }
AndroidManifest.xml
<activity android:name="hello" android:label="@string/app_name"> </activity>
运行效果:
当点击按钮1时:
2.传递数据 包Bundle
在Activity跳转时如何传递复杂的数据。
MainActivity.java
public class MainActivity extends AppCompatActivity { //声明变量 private Button button_2; @Override protected void onCreate(Bundle savedInstanceState) { //保存Activity的状态 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得对象引用 button_2=(Button)this.findViewById(R.id.button_2); //注册监听器,匿名内部类 button_2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,new_main.class); Bundle bundle=new Bundle(); bundle.putString("name","jikexueyuan");//传递字符串 bundle.putInt("age",2);//传递整数类型参数 bundle.putString("name1","iwen"); intent.putExtras(bundle); startActivity(intent); } }); } }
new_main.java
public class new_main extends AppCompatActivity { private TextView textView_2; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.new_main); textView_2=(TextView)findViewById(R.id.textView_2); Intent intent=getIntent(); Bundle data=intent.getExtras(); textView_2.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"), data.getInt("age"),data.getString("name1","leo")));//如若没有传入name1,则显示默认值leo } }
另一种方法:
MainActivity.java
public class MainActivity extends AppCompatActivity { //声明变量 private Button button_2; @Override protected void onCreate(Bundle savedInstanceState) { //保存Activity的状态 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得对象引用 button_2=(Button)this.findViewById(R.id.button_2); //注册监听器,匿名内部类 button_2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,new_main.class); Bundle bundle=new Bundle(); bundle.putString("name","jikexueyuan"); bundle.putInt("age",2); bundle.putString("name1","iwen"); //intent.putExtras(bundle); intent.putExtra("data",bundle); startActivity(intent); } }); } }
new_main.java
public class new_main extends AppCompatActivity { private TextView textView_2; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.new_main); textView_2=(TextView)findViewById(R.id.textView_2); Intent intent=getIntent(); //Bundle data=intent.getExtras(); Bundle data=intent.getBundleExtra("data"); textView_2.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"),data.getInt("age"),data.getString("name1","leo"))); } }
3.传递值对象
在Activity跳转时如何传递自定义的值对象。
在activity_main中新添加一个button_3
新建User.class
public class User implements Serializable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User(String name,int age){ this.name=name; this.age=age; } }
MainActivity.java
public class MainActivity extends AppCompatActivity { //声明变量 private Button button_3; @Override protected void onCreate(Bundle savedInstanceState) { //保存Activity的状态 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得对象引用 button_3=(Button) this.findViewById(R.id.button_3); //注册监听器,匿名内部类 button_3.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,ding.class); intent.putExtra("user",new User("jikexueyuan",2)); startActivity(intent); } }); } }
ding.java
public class ding extends AppCompatActivity{ private TextView textView_3; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.ding); textView_3=(TextView)findViewById(R.id.textView_3); Intent intent=getIntent(); User user=(User)intent.getSerializableExtra("user"); textView_3.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge())); } }
另一种android平台提供的实现方法
User.java
public class User implements Parcelable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } 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 flags) { 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]; } }; }
ding.java
public class ding extends AppCompatActivity{ private TextView textView_3; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.ding); textView_3=(TextView)findViewById(R.id.textView_3); Intent intent=getIntent(); //User user=(User)intent.getSerializableExtra("user"); User user=intent.getParcelableExtra("user"); textView_3.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge())); } }