Android活动

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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值