您的位置:首页 > 编程语言

《第一行代码》第二章/Toast,Menu,Intent

2015-10-28 10:28 344 查看
1:Toast:

Toast是一个提醒消息框,用于将一些短小的信息通知给用户,不占用屏幕空间,而且会在一段时间后自动消失。

例子

Toast.makeText(this, "xxxxxxx", Toast.LENGTH_SHORT).show();
参数:(context上下文,"文本信息",toast显示时长)

2:menu:

在res/menu/目录下新建xml文件,在里面写入类似这样的代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.tony.book.activitymenu.MainActivity" >

<item android:id="@+id/action_settings" android:orderInCategory="100" android:title="@string/action_settings" app:showAsAction="never" />
<item android:id="@+id/add_item" android:title="Add"></item>
<item android:id="@+id/remove_item" android:title="remove"></item>

</menu></span>
然后在mainActivity中重写onCreateOptionMenu()为当前活动创建菜单和onOptionsItemSelected()添加菜单相应事件,如:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
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:
break;
}
return true;
}


3:Intent:

用于在Activity,Service,广播,内容提供器等组件间来回穿梭,跳转。

Intent可以指定用于启动活动,服务,广播等,或者在组件间来回传递信息。主要分为显式Intent和隐式Intent。

1)显式Intent

举例:启动另一个活动:

Intent intent=new Intent(MainActivity.this,secondActivity.class);
startActivity(intent);
Intent有多种构造函数,我们选用其中一种来完成启动下一个活动的功能。重载该构造函数(context上下文,要打开的活动)并将意图具现化为intent,传入startActivity()启动目标活动。

2)隐式Intent

并不明确指出我们要启动哪一个活动,通过action,category等信息表达,交由系统分析到底做什么。

例子:

在AndroidManifest.xml文件中的第二个活动(要打开的)的<activity>部分中添加<intent-filter>,在其中指定该活动响应的action和category。

添加<intent-filter>部分:

<activity android:name=".secondActivity"
android:launchMode="singleInstance">
<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>


当其与开始的活动的Intent指定的action和category匹配时,这个活动就会响应Intent。

有点像广播的说。

Intent指定action和category:

Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");


更多隐式Intent的用法:

打开网页:

调用Android内置动作ACTION_VIEW,即打开系统浏览器。通过Uri.parse()将一个网址字符串解析成一个Uri对象,调用Intent的setData()方法传入uri。

Intent intent=new Intent(Intent.ACTION_VIEW)
intent.setData(Uri.parse("http://www.baidu.com"))


同样需要在AndroidManifest.xml里注册

<data android:scheme="http">


再比如在活动中调用拨号

Intent intent=new Intent(Intent.ACTION_DIAL)
intent.setData(Uri.parse("tel:10086))


3)那么如何在活动之间传递数据呢?
范例:从FirstActivity传data到SecondActivity

FirstActivity:

String data="Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", "data");//(键,数据)
startActivity(intent);


SecondActivity:

onCreate():

Intent intent=getIntent();
String data=intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);

4)返回数据给上一个活动

范例:从FirstActivity返回data到SecondActivityFirstActivity:

使用startActivityForResult()以返回数据的目的启动SecondActivity
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent,1);
1是请求码

得到数据:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (requestCode) {
case 1:
if(resultCode==RESULT_OK){
String returnedData=data.getStringExtra("data_return");
Log.d("MainActivity", returnedData);
}
break;

default:
break;
}
}


SecondActivity:

Intent intent=new Intent();
intent.putExtra("data_return", "Hello MainActivity");
setResult(RESULT_OK, intent);//(处理结果,数据)
finish();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: