文章目录:
一、多个Activity之间的调用
1、Intent显式调用
2、Intent隐式调用
二、使用Intent在Activity之间传递数据
1、直接使用Intent传递数据
2、使用Bundle传递数据
一、Intent在寻找目标组件时有两种方法
1、显示调用
①、采用Intent有参构造方法
关键代码:
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent)
案例:
public class MainActivity extends Activity {
private Button btn=null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(Button)findViewById(R.id.call);
btn.setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener(){
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);//启动 intent }
};
}
public class SecondActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
}
}
②采用Intent无参数构造方法
关键代码:
Intent intent=new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
startActivity(intent);
案例:
public class MainActivity extends Activity {
private Button btn=null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(Button)findViewById(R.id.call);
btn.setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener(){
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
startActivity(intent);//启动intent }
};
}
public class SecondActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
}
}
2、隐式调用
关键代码:
String urlString = editText.getText().toString();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
startActivity(intent);
案例:
public class WebViewIntentDemo extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText editText = (EditText)findViewById(R.id.edit_url);
final Button button = (Button)findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener(){
public void onClick(View view){
String urlString = editText.getText().toString();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
startActivity(intent);
}
});
}
}
二、Intent在Activity间传递参数
1、直接使用Intent传递数据:
关键代码:
putExtras(Bundle data):向Intent中放入需要携带的数据。
putExtra(String name, int value):向Intent中放入键值对。
putExtra(String name, char value)
putExtra(String name, int[] value)
案例:
btn.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
String name=edit1.getText().toString();
int pwd=Integer.valueOf(edit2.getText().toString());
Intent intent=new Intent();
intent.setClass(MainActivity.this, OtherActivity.class);
intent.putExtra("name", name);
intent.putExtra("pwd", pwd);
startActivity(intent);
}
});
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b1);
TextView txt1=(TextView)findViewById(R.id.txt1);
TextView txt2=(TextView)findViewById(R.id.txt2);
Intent intent=getIntent();
String name=intent.getStringExtra("name");
int pwd=intent.getIntExtra("pwd", 0);
txt1.setText(name);
txt2.setText(""+pwd);
}
2、Intent 利用 Bundle 传参数
关键代码:
使用Bundle实现数据传递。Bundle是数据携带包,提供了多个方法存入数据。
putXxx(String key,Xxx data):向Bundle中放入各种类型数据。
putSerializable(String key,Serializable data):向Bundle中放入一个可序列化的对象。
为了取出Bundle数据携带包里的数据,Bundle提供如下方法。
getXxx(String key):从Bundle取出Int、Long等各数据类型数据。
getSerializable(String key):从Bundle取出一个可序列化的对象。
案例:
btn.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
String name=edit1.getText().toString();
int pwd=Integer.valueOf(edit2.getText().toString());
float score=Float.valueOf(edit3.getText().toString());
Bundle bundle=new Bundle();
bundle.putString("name", name);
bundle.putInt("pwd", pwd);
bundle.putFloat("score", score);
Intent intent=new Intent();
intent.setClass(MainActivity.this, OtherActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
String name=bundle.getString("name");
int pwd=bundle.getInt("pwd");
float score=bundle.getFloat("score");
txt1.setText(name);
txt2.setText(""+pwd);
txt3.setText(""+score);