2010-01-29 45 views
3

我的應用程序有一個實際上是PreferenceActivity的設置菜單。 當它被創建時,如果沒有設置布爾值,我想轉到設置它的DialogPreference。從PreferenceScreen轉到DialogPreference

我試圖用一個意圖,但應用力做關閉與此錯誤消息:

E/AndroidRuntime(239): android.content.ActivityNotFoundException: 無法找到明確的活動類 { com.xxxx/com.xxxx.xxxxPreference}; 你在你的AndroidManifest.xml中宣佈了這個活動嗎 ?

我該怎麼做?將該DialogPreference添加到清單可以嗎?

+1

力關閉意味着一個uncatched異常被倒掉。看看LogCat。 – tbruyelle 2010-01-29 20:12:51

+0

你說得對,我只是添加它。謝謝。 – Macarse 2010-01-29 20:38:44

回答

4

一個DialogPreference不是一個Activity:只需添加下面這一行。這只是一個Preference,點擊後會顯示Dialog

問題是沒有明顯的方式以編程方式點擊Preference。但是,由於您使用的是DialogPreference,因此您已擁有自己的子類。因此,我們可以通過添加下面的方法您的DialogPreference子解決我們的問題:在的onCreate()

//Expose the protected onClick method 
void show() { 
    onClick(); 
} 

然後你PreferencesActivity你就會有這樣的事情,從你的XML文件加載的首選項。

// Load the preferences from an XML resource 
addPreferencesFromResource(R.xml.preferences); 

之後,你可以把一些像這樣的代碼:

booleanProp = true; //set this to the value of the property you're checking  

if (! booleanProp) { 
    //Find the Preference via its android:key 
    //MyDialogPreference is your subclasss of DialogPreference 
    MyDialogPreference dp = (MyDialogPreference)getPreferenceScreen().findPreference("dialog_preference"); 
    dp.show(); 
} 

這有點黑客,因爲暴露protected方法不理想,但它確實有效。

另一種辦法是更換DialogPrefenceActivity它包含了所有你希望保持和那麼你可以通過一個Intent啓動它的選項,但我假設有你想自己定製一個很好的理由Dialog具有特定的佈局。如果你想有一個第二PreferenceActivity,你可以把它添加到您的喜好XML文件如下:

<PreferenceScreen 
     android:title="@string/title_of_preference" 
     android:summary="@string/summary_of_preference"> 
    <intent android:action="your.action.goes.HERE"/> 
</PreferenceScreen> 
+0

Dave,優秀的答案。但我錯過了如何實例化它,因爲我需要attrs是在前面。xml – Macarse 2010-02-01 15:54:23

+0

@Macarse - 不是對'addPreferencesFromResource'的調用實例化'DialogPreference'所需的一切嗎?如果你把我的代碼放在那之後,它應該沒問題。 (已編輯答案澄清這一點。) – 2010-02-01 16:19:58

+0

它的工作。謝謝。 – Macarse 2010-02-01 19:50:40

-1

要使用Intent啓動活動,該活動必須位於Android清單中。在自己的權利

<activity android:name=".path.to.MyActivity"/> 
+0

我收到一個錯誤。 xxxxPreference不會擴展android.app.Activity。 – Macarse 2010-01-29 20:52:20

+0

xxxPreference是一個對話框,而不是一個活動?爲了顯示你使用dialog.show()的對話框,Intents是爲了激活活動。如果你想要一個看起來像一個對話框的活動,你可以將你的活動的主題設置爲Theme.Dialog。 – 2010-01-29 21:40:22

+0

這是一個對話框,但做一個.show()我必須實例化它,我需要在pref.xml中的attrs :( – Macarse 2010-01-29 22:20:00