onClick而不是OnClick
Toast
Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show();
创建菜单
在main.xml中
<item
android:id="@+id/add_item"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
在主活动中使用
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;//创建菜单显示
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
配置主活动
在activity里加
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
显式intent
public void onClick(View v){
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
隐式intent
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="com.example.activitytest.MY_CATEGORY"/>
</intent-filter>
</activity>
action里面的为响应这个action,category为附加信息
在触发响应的活动内修改onClick函数
public void onClick(View v){
Intent intent=new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
}
注意需要同时符合action和category才能响应
隐式intent可以启动其他程序的活动
public void onClick(View v){
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
Intent.ACTION_VIEW是Android系统的内置动作
Uri.parse(String)将一个网址字符串解析成一个Uri对象
intent.setData()传递Uri对象
在intent-filter标签中可以再配置一个data标签,用于更精确的指定当前活动能够响应什么样的数据,中可配置如下
Android:scheme:用于指定数据的协议部分 http
Android:host:数据的主机名 www.baidu.com
Android:port:数据的端口 ,一般紧随在主机名之后
Android:path 主机名和端口之后的部分 如一段网址中跟在域名之后的部分
Android:mimrType 指定可以处理的数据类型,允许通配符的方式
<activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"/>
</intent-filter>
</activity>
一样能够响应活动1的启动网页请求,但并没有加载并显示网页的功能
点击拨打电话
public void onClick(View v){
Intent intent=new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
向下一个活动传递数据
Eg:活动传递给活动
Log.d(“SecondActivity”,data);
第一个为tag,通常传入当前类名,第二个参数为要打印的内容
logd按下Tab,则会补充完整
在onCreate外输入logt按下Tab
private static final String TAG = “HelloWorldActivity”;
向下一个活动传递参数
Eg:从活动1传递给活动2
活动1:
public void onClick(View v){
String data="Hello SecondActivity";
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);/* 显示intent*/
intent.putExtra("extra_data",data);:
startActivity(intent);
}
intent.putExtra(”extra_data”,data)第一个为键,第二个为数据
活动2:
public void onClick(View v){
Intent intent=getIntent();
String data=intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
startActivity(intent);
}
intent.getStringExtra(“extra_data”);传递的是字符串,就用string,
若是整数则为intent.getIntExtra(“extra_data”);
返回数据给上一个活动
活动1:
public void onClick(View v){
String data="Hello SecondActivity";
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);/* 显示intent*/
startActivityForResult(intent,1);
}
startActivityForResult(intent,1);启动活动2,请求码只要是唯一就行了,这里传入1,在被启动的活动销毁时,传递回数据
活动2:
public void onClick(View v){
Intent intent=new Intent();//仅仅用于传递数据
intent.putExtra(“data_return”,”Hello FirstActivity”);
setResult(RESULT_OK,intent);//第一个返回处理结果,RESULT_OK或者RESULT_CANCELED, 第
二个把有数据的intent传递回去
finish();
}
由于是用startActivityForResult(intent,1)启动活动2,销毁后则会回到上一个活动的protected void onActivityResult(int requestCode, int resultCode, Intent data) 中,
则重写函数
protected void onActivityResult(int requestCode, int resultCode, Intent data) {//第一个为请求码,判断数据来源,第二个为返回数据时传入的处理结果,第三个是携带数据的intent
switch (requestCode){
case 1:
if(requestCode==RESULT_OK){
String returnedData=data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
}
break;
default:
}
}
此时需要按下BUTTON 2按钮才能销毁活动2返回数据给活动1,BACK键返回则不传递数据
若想Back也返回数据,则在活动2中
public void onBackPressed() {
Intent intent=new Intent();
intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();
}