1.创建Android项目工程:AndroidTest
创建过程可参考网上诸多教程。
2.添加新的Activity,步骤如下
a. 在layout文件夹上右键,New-Activity-相应Activity,(如Basic Activity).
b. 配置Activity
填写Activity Name,Layout Name,Title,Package name等。
注意:Package name需填写项目包名称,如com.androidtest(初学,不知道对不对,请指正).
c. 修改activity_second.xml和content_second.xml
如添加一个TextView,下面是content_second.xml的代码,我认为activity_second.xml应该是layout的一个框架,而content_second.xml为该框架的内容界面.
xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" android:id="@+id/content_second" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.androidtest.SecondActivity" tools:showIn="@layout/activity_second"> <TextView android:text="The Second Activity" android:id="@+id/textView" app:layout_anchor="@+id/include" app:layout_anchorGravity="center_vertical|left" android:layout_gravity="center_vertical|right" android:layout_height="42dp" android:layout_width="match_parent" android:textSize="30sp" /> RelativeLayout>
d.到此Activity就添加好了,下面是预览界面
3.Activity之间的跳转
a.在activity_main.xml添加按钮
代码如下:
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Sencond Activity" android:onClick="onClick"/>
注意:因android:text="Sencond Activity"采用了硬编码字符串,所以AS给了提示(超智能),此处先不修改了,提示如下:
b.在MainActivity添加Button的onClick事件处理
/** * 按钮Sencond Activity 事件处理 */ public void onClick(View view) { try { startActivity(new Intent("com.AndroidTest.SecondActivity")); } catch (Exception ex) {
// 显示异常信息 Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } }
4.运行及异常处理
a. 异常信息
添加好了Activity,代码也写好了,接下来就是运行了,结果悲剧了,出现了异常:No Activity found to handle Intent { act=com.AndroidTest.SecondActivity }
见下图:
b. 解决办法
Intent分为显示Intent和隐式Intent;使用显示Intent时,可以不添加
第一种:
//将3.b中的代码修改为显示Intent
public void onClick(View view)
{
try
{
//startActivity(new Intent("com.AndroidTest.SecondActivity"));//隐式intent
Intent intent = new Intent(this, SecondActivity.class);//显示intent
startActivity(intent);
}
catch (Exception ex)
{
// 显示异常信息
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show();
}
}
第二种:
修改AndroidManifest.xml中SecondActivity部分,添加
原代码:
<activity android:name=".SecondActivity" android:label="@string/title_activity_second" android:theme="@style/AppTheme.NoActionBar">activity>
修改后代码:
<activity android:name=".SecondActivity" android:label="@string/title_activity_second" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="com.AndroidTest.SecondActivity" /> <category android:name="android.intent.category.DEFAULT" /> intent-filter> activity>
c. 异常解释
每一个通过startActivity()方法发出的隐式Intent都至少有一个category,就是 "android.intent.category.DEFAULT",
所以只要是想接收一个隐式Intent的Activity都应该包括"android.intent.category.DEFAULT" category,不然将导致 Intent 匹配失败。
参见:Android关于No Activity found to handle Intent的问题
d. 最终运行图
5. 总结
学习Android一周,好多知识还没有形成一个整体框架,再接再厉。