1. 程式人生 > >Android學習筆記 ----啟動 Theme.Dialog 主題的Activity時程式崩潰的解決辦法

Android學習筆記 ----啟動 Theme.Dialog 主題的Activity時程式崩潰的解決辦法

新建了一個Android Studio工程,在MainActivity的主介面中添加了兩個按鈕,點選其中一個按鈕用來啟動 NormalActivity,點選另一按鈕用來啟動DialogActivity. 其中,NormalActivity和DialogActivity都是很簡單的介面,只是在AndroidManifest.xml中,對DialogActivity新增主題 android:theme="@android:style/Theme.Dialog, AndroidManifest.xml檔案如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.zhangsir.activitylifecycletest">
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme
="@style/AppTheme">
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity
>
<activity android:name=".NormalActivity" > </activity> <activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog" > </activity> </application> </manifest>

MainActivity的 onCreate()函式如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button startNormalActivity=(Button)findViewById(R.id.start_normal_activity);
        Button startDialogActivity=(Button)findViewById(R.id.start_dialog_activity);
        startNormalActivity.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this ,NormalActivity.class);
                startActivity(intent);
            }
        });
        startDialogActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);
            }
        });
    }

DialogActivity 定義如下:

public class DialogActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
    }
}

程式主介面如下:

當單擊 'START DIALOGACTIVITY' 按鈕時,程式便停止運行了。百思不得其解,後來終於在網上別人的回答中找到了靈感:

解決方法1

將DialogActivity的super class改成 Activity 即可。

解決方法2

<activity android:name=".DialogActivity"
            android:theme="@android:style/Theme.Dialog" >
        </activity>

將AndroidManifest.xml中 .DialogActivity 的theme改成如下樣式:

<activity android:name=".DialogActivity"
            android:theme="@style/Theme.AppCompat.Dialog" >
</activity>

由於在較新版本的Android Studio中,預設的Activity的super class 基本都是 AppCompatActivity,所以建議保留預設生成的 super class,採用方法2來解決程式崩潰的問題。

相關推薦

Android學習筆記 ----啟動 Theme.Dialog 主題Activity程式崩潰解決辦法

新建了一個Android Studio工程,在MainActivity的主介面中添加了兩個按鈕,點選其中一個按鈕用來啟動 NormalActivity,點選另一按鈕用來啟動DialogActivity. 其中,NormalActivity和DialogActivity都是很簡單的介面,只是在AndroidMa

Android學習筆記之為Dialog自定義佈局,並說明空指標問題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android學習筆記(十一:Activity-ListView

在手機中經常有列表方式。如果Activity中只有唯一一個List(這也是通常的情況),可以繼承ListActivity來實現。我們用兩個例子來學習List。List例子一:利用Android自帶的List格式步驟一:Android XML檔案ListActivity是一個全屏的list,如果我們需要定製la

Android學習筆記(三三) Activity生命週期

                Android很大的應用場景是手機,有一些應用具有特別的優先級別,例如電話,同時裝置的記憶體是有限的。因在某些情況下系統將踢走activity,以便是否記憶體。因此在開發過程中,我們需要管理好activity的生命週期。右圖是Android的docs中提供的activity的時

Android學習筆記整理(8)--Activity的顯式意圖和隱式意圖

Android中Intent尋找目標元件的方式分為兩種,一種是顯式意圖,另一種是隱式意圖1.顯式意圖在通過Intent啟動Activity時,需要明確指定啟用元件的名稱。在程式中,如果需要在本應用中啟動

Android學習筆記2 建立另一個activity以及實現intent訊息傳遞

學習內容來自google教程:http://developer.android.com/intl/zh-cn/training/basics/firstapp/starting-activity.html#DisplayMessage 1 在之前的MainActivity基

Android學習筆記--GMS認證中常見的fail項及解決方法

############################################################# cts測試的一些命令:     sudo chmod a+x copy_media.sh     ./copy_media.sh all     ad

emulator啟動自己編譯的工程出錯的解決辦法

自己編譯了個android4.2工程,第一次編譯完直接在src下emulator 模擬器正常執行,後來去不行了一直提示如下錯誤,在網上找了半天解決辦法,都說是加什麼環境變數,也沒有解決,摸索發現如下解決辦法 emulator: ERROR: You did not spec

Android學習筆記——Activity的四種啟動模式

1.Activity的管理機制 Android的管理主要是通過Activity棧來進行的。當一個Activity啟動時,系統根據其配置或呼叫的方式,將Activity壓入一個特定的棧中,系統處 於執行(Running or Resumed)狀態。當按Back鍵或觸發finish(

Pro Android學習筆記(一三七):Home Screen Widgets(3):配置Activity

map onclick widgets info xtra ces extends height appwidget 文章轉載僅僅能用於非商業性質,且不能帶有虛擬貨幣、積分、註冊等附加條件。轉載須註明出處http://blog.csdn.net/flowingfly

Android學習路線(十二)Activity生命周期——啟動一個Activity

-c out 方式 下載地址 生命 後臺線程 ring lan debug DEMO下載地址:http://download.csdn.net/detail/sweetvvck/7728735 不像其他的編程模式那樣應用是通過main()函數啟動的。Android系

Android學習筆記三:用Intent串聯activity

conda data activity setresult result 意圖 prot 其他 cte 一:Intent Intent可以理解為 意圖。 我們可以通過創建intent實例來定義一個跳轉意圖,意圖包括:要跳轉到哪個頁面、需要傳遞什麽

Android學習筆記----閃屏主題

筆記 roi them android學習 ppt win app parent 學習 <!--閃屏主題--> <style name="welcome" parent="AppTheme"> <!--窗口透明--&g

Android項目實戰(七):Dialog主題Activity實現自定義對話框效果

utf 定義 nim 亮點 close .com 去除 span 代碼 原文:Android項目實戰(七):Dialog主題Activity實現自定義對話框效果想必大家都用過Dialog主題的Activity吧,用它來顯示自定義對話框效果絕對是一個非常不錯的選擇。 即把a

Android學習筆記Activity RelativeLayout

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android學習筆記——Activity之間的跳轉(五)

1:使用Intent(意圖)的方式實現Activity跳轉 (1)MainActivity.java: public class MainActivity extends Activity { private Button startOther; @Override pro

Android學習筆記——Activity(一)

1.什麼是Activity       (1)Activity是一個應用程式元件       (2)為應用程式提供一個視覺化頁面       (3)使用者通過此頁面與應用程式互動 2.啟動Act

android學習筆記activity間的通訊案例之高德地圖實現天氣查詢

【概述】app實現天氣查詢是再正常不過的功能了,又因為往往不止一個activity去獲取資料,那就想到封裝一個類,需要時去呼叫獲取即可。 【注】因為看文件還有點懵,故將自己抓腦寫的程式碼記錄下,以便查詢 【思路】activity傳送請求--獲取地址--根據地址獲取天氣

Android學習筆記解決螢幕旋轉後Activity重建問題

0.只需在activity類下重寫onSaveInstanceState方法,下面是一個重寫的例項,目的是儲存oncreate()方法中的臨時變數 @Override protected void onSaveInstanceState(Bundle outState)

Android學習筆記:Activity和Fragment——建立Activity

建立一個activity需要的三步 新建類繼承activity或者子類 在AndroidManifest裡面宣告 建立佈局xml檔案,並在activity的onCreate裡面設定 第一步: 在java下面com.....的包裡面新建一個class,繼承自AppC