Android學習筆記之Android Studio添加新的Activity


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM