想要调用一个活动有三样东西绝对不能少:
在AndroidMainifest中注册
在布局中,布置好id,以及其他属性
在.java中写下
Intent intent = new intent(“在注册好的action的名称”/intent.XX);
可以加上addcategory,控制多个目录
startActivity()来启动intent
隐式启动Activity的intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data,可以是全部或部分匹配
显示启动:
Intent intent = new Intent(first.this,second.class);
startActivity(intent);
规律,个人认为,四大组件无论哪个既然都需要在注册,那么一定会在.Java中使用相同的名称或者ID去匹配
除了加上action 和category之外还能加上
Data:android:scheme 用于数据的协议部分(http)
Android:host 用于指定主机名(www.baidu.com)
Android:port 用于端口,一般随主机名后
Android:path 用于主机与端口之后,如一段网址中跟在域名之后的内容
Intent.ACTION_xx 系列全是Android内部的内置动作
但是部分动作需要本身就需要有的软件,不然无法获取,比如geo获取地理位置,需要百度地图软件
传递数据到下一个活动
上一个活动需要putextra()
下一个活动则getintent().getStringExtra()
传递到上一个活动
同一个思路,申请一个intent putextra传,getStringExtra接受。Intent声明一个data用来储存
第一个活动需要用startActivityForresult()来建立
上一个活动:
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(first.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
//String data = "Hello SecondActivity";
Intent intent = new Intent(first.this,second.class);
//intent.putExtra("extra_data", data);
startActivityForResult(intent, 1);
// TODO Auto-generated method stub
}
});
protected void onActivityResult(int requestCode,int resultCode, Intent data){
switch(requestCode)
{
case 1:
if(resultCode == RESULT_OK)
{
String returnedData = data.getStringExtra("data_return");
Log.v("First",returnedData);
}
break;
default:
}
第二个活动
Button button2 = (Button) findViewById(R.id.button_2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello first");
setResult(RESULT_OK,intent);
finish();
// TODO Auto-generated method stub
}
});
总结:
想要调用控件,必须在R.java里面有ID,要声明并联系ID
所谓的intent就是目的过滤器,
目的是什么,将两者通过或者默认名(注册时,要调用Android.xx)联系,和来声明多一个活动
而传递信息,顺着传递,需要putExtra(),第二活动需要getStringExtra()来获取
数据存在intent中
返回数据,则是调用setActivityForResult(),以及上述两种函数联系起来