Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据。
Intent是Android一个很重要的类。Intent直译是“意图”,比如你想从这个Activity跳转到另外一个Activity,这就是一个意图。
activity跳转可以选择无返回结果,也可以有。如下两个demo
无返回结果:
package com.ly;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
public class BundleTestActivity extends Activity {
EditText et1 ;
EditText et2 ;
Button bt;
RadioButton rb;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et1=(EditText) findViewById(R.id.et1);
et2=(EditText) findViewById(R.id.et2);
rb=(RadioButton) findViewById(R.id.radioButton1);
bt=(Button) findViewById(R.id.btn);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String username =et1.getText().toString();
String password=et2.getText().toString();
String sex =rb.isChecked()?"男":"女";
User u =new User(username,password,sex);
Bundle b =new Bundle();
b.putSerializable("user", u);
Intent i =new Intent();
i.setClass(BundleTestActivity.this, Show.class);
i.putExtras(b);
startActivity(i);
}
});
}
}
activity
package com.ly;
import java.io.Serializable;
public class User implements Serializable {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public User(String username, String password, String sex) {
super();
this.username = username;
this.password = password;
this.sex = sex;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
private String password;
private String sex;
}
传递的实体(实现序列化)
package com.ly;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class Show extends Activity {
private TextView tw;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.show);
tw =(TextView) findViewById(R.id.tw);
Intent i =getIntent();
Bundle b =i.getExtras();
User u = (User) b.getSerializable("user");
tw.setText(u.getUsername()+u.getSex());
}
}
获得数据
(布局配置省略)
返回结果的跳转:
需要重写onActivityResult方法
package com.ly;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class ActivitycallbackdataActivity extends Activity {
private Button btn;
private EditText et;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.btn);
et = (EditText) findViewById(R.id.et);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivitycallbackdataActivity.this,
Result.class);
startActivityForResult(intent, 0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0 && resultCode == 0) {
Bundle datas = data.getExtras();
String city = datas.getString("city");
et.setText(city);
}
}
}
跳转到的类
package com.ly;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class Result extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent i = getIntent();
Bundle b =new Bundle();
b.putString("city", "广州");
i.putExtras(b);
this.setResult(0, i);
this.finish();
}
}
** 注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。
附:demo1布局