创建Activity
Ø 定义Activity
Ÿ 定义类继承Activity
Ÿ 在AndroidManifest.xml的<application>节点中声明<activity>
Ø 显式意图创建方式
Ÿ 构造函数,代码少
new Intent(this, NewActivity.class);
Ÿ 类名形式,灵活,可扩展性强
intent.setClassName(this, "cn.itcast.activity.NewActivity");
Ÿ 包名类名形式,可启动其他程序中的Activity
intent.setClassName("cn.itcast.downloader", "cn.itcast.downloader.MainActivity");
Ø 创建Activity并传递数据
Ÿ 在意图对象中封装了一个Bundle对象,可以用来携带数据
Ÿ 在新Activity中可以获得意图对象以获取其中Bundle保存的数据
Ø 创建Activity获取返回数据
Ÿ 使用startActivityForResult(Intentintent, int requestCode) 方法打开Activity
Ÿ 重写onActivityResult(int requestCode, intresultCode, Intent data) 方法
Ÿ 新Activity中调用setResult(int resultCode, Intent data) 设置返回数据之后,关闭Activity就会调用onActivityResult方法
Ø 隐式意图创建Activity
Ÿ 显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件
Ÿ 在清单文件中定义<activity>时需要定义<intent-filter>才能被隐式意图启动
注意事项:
Ÿ <intent-filter>中至少配置一个<action>和一个<category>,否则无法被启动
Ÿ Intent对象中设置的action、category、data在<intent-filter>必须全部包含才能启动
Ÿ <intent-filter>中的<action>、<category>、<data>都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动
如果一个意图可以匹配多个Activity,Android系统会提示选择
主MainActivity
public void onClick(View view) {
// 创建 意图对象,关联指定Activity类
Intent intent = new Intent();
// 显示意图
// intent.setClass(getApplicationContext(), OtherActivity.class);
// intent.setClassName(getApplicationContext(),"com.example.activity.OtherActivity" );// 参数:当前上下文, 类的全限定名
// intent.setClassName("com.example.activity", "com.example.activity.OtherActivity");//参数:应用唯一标识,类的全限定名
//隐式意图:
//1.在设置setAction 的时候如果,后面会自动添加一个intent.addCategory("android.intent.category.DEFAULT");
//也就是说在清单文件中必须要写上<category android:name="android.intent.category.DEFAULT" />才能匹配上
// intent.setAction("android.intent.action.CALL");
// intent.setData(Uri.parse("tel://18600001234"));
intent.setAction("wuha");
intent.addCategory("android.intent.category.DEFAULT");//可以不写会自动添加
intent.setData(Uri.parse("qc://abc")); //这个android:scheme需要在清单文件中配置
//同时设置Data和Type必须用setDataAndType一起的这个方法,分开的话 不行,因为setType会清空之前的setData
//打开浏览器,也可以自己配置相对应的action和data来捕获
// intent.setAction(Intent.ACTION_VIEW);
// intent.setDataAndType(Uri.parse("http://192.168.1.99:8080/14.Web/"),"text/html");
// intent.setAction(Intent.ACTION_VIEW);
// intent.setDataAndType(Uri.parse("file:///mnt/sdcard/fbb.jpg"), "image/jpg");
//尝试传递 一个数据到另外一个Activity
// intent.putExtra("name", "张三");//传递字符串
// intent.putExtra("age", 12);
Person person = new Person(1,"tiancai",22,"man");
intent.putExtra("person", person);
startActivity(intent);
// startActivityForResult(intent, 202);// // 开启Activity, 等待结果, 当新开启的Activity关闭时, 会执行onActivityResult方法
}
/*
* requestCode 开启Activity时的请求码, 用来判断哪里开启的
* resultCode 新Activity关闭后的返回码
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bundle bundle1 = data.getBundleExtra("bundle1");
Bundle bundle2 = data.getBundleExtra("bundle2");
String name1 =bundle1.getString("name");
int age1 = bundle1.getInt("age");
String name2 =bundle2.getString("name");
int age2 = bundle2.getInt("age");
resultTV.setText(name1+":"+age1+","+name2+":"+age2);
}
OtherActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
TextView dataTV =(TextView) findViewById(R.id.dataTV);
/** Return the intent that started this activity. */
Intent intent = getIntent();
// String name = intent.getStringExtra("name"); //获取那边来的数据
// int age = intent.getIntExtra("age", -1);
// dataTV.setText(name+":"+age);
Person person = (Person) intent.getSerializableExtra("person");
dataTV.setText(person.toString());
Intent resultIntent = new Intent();
Bundle bundle1 = new Bundle();
bundle1.putString("name", "lisi");
bundle1.putInt("age", 22);
Bundle bundle2 = new Bundle();
bundle2.putString("name", "zhaoliu");
bundle2.putInt("age", 23);
resultIntent.putExtra("bundle1", bundle1);
resultIntent.putExtra("bundle2", bundle2);
setResult(315, resultIntent);
}
public void onClick(View view){
finish(); //关闭当前Activity
}
OtherActivity在清单中的配置
<activity
android:name=".OtherActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="wuha" />
<action android:name="android.intent.action.CALL" />
<action android:name="android.intent.action.VIEW" />
<data android:scheme="qc" />
<data android:scheme="tel" />
<data
android:scheme="http"
android:mimeType="text/html"
/>
<data
android:scheme="file"
android:mimeType="image/*"
/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>