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. 最終運行圖