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時,可以不添加<intent-filter>標簽,但是隱式Intent必須添加<intent-filter>標簽,所以解決方法有兩種:
第一種:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//將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部分,添加<intent-filter>標簽.
原代碼:
<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. 最終運行圖




