站內搜尋

2012/5/8

Android Tips 開發小技巧 - PreferenceFragment 失效?!

最近又開始寫 Tool 了,看來跟它真的是很有緣...
即然要寫 Tool ,當然就來玩玩新技術了!
這次被拿出來研究的,就是 PreferenceActivity + PreferenceFragment 這個 Google 大力推的新組合!
但!我的人生總是不會這麼順利呀呀呀~~~~~~
在開發的過程中,發生了一件意外,也讓我注意到了這個小地方,在這裡跟大家分享一下。
其實發生的問題很簡單,就是我的 PreferenceFragment 怎麼樣也打不開....

在 Header.xml 裡面我清楚的定義了下面的內容,
<header    
    android:id="@+id/demodisplay_1"
    android:fragment="com.TAB.android.demo.ui.DemoDisplay"
    android:title="@string/signal_strength_title"
    android:summary="@string/signal_strength_summary"
/>
但卻怎樣也無法打開 DemoDisplay,只好乖乖認命跑去 Android developer PreferenceActivity 乖乖的 K 一遍,但怎麼檢查卻都還是無法成功的叫起 DemoDisplay。甚至一度懷疑到,是不是只能叫起 InnerClass 的 PreferenceFragment ... (當然,這個懷疑真的很瞎..)

最後,沒辨法了,只好跑去把 PreferenceActivity 的 Source code 拿出來 K ...
原來,連接到 Fragment 的方法其實很單,不過就是個 StartActivity 呼叫回自己罷了。
當 PreferenceActivity 再次被叫起時,在 onCreate() 進行一連串的 initiate 動作,經由帶來的參數來決定是否/如何顯示 Fragment。
但,這個結論讓我更加的不解,那為什麼我的程式不會跑進 onCreater() 呢?

當程式的問題和 Activity 的生命週期發生了關係時,慢慢的就會開始懷疑到 AndroidManifest 上頭,最後,終於在一個該死的地方讓我找出了原因...
android:launchMode="singleTask"
對,就是這麼的該死,魔鬼藏在細節中呀!!!!!!!
就是這個該死的 launch mode 導至 PreferenceActivity 的 Fragment 無法正常運作。
把它拿掉就一切正常了。

唉,所以,在開發 Android 程式時,真的要小心自己的每一步呀!
在這裡把這個解了我一下午的問題分享給大家,希望對某些人有幫助。

2 則留言:

  1. 您好,我最近才在玩android程式.
    我在android development教學中"Building a Dynamic UI with Fragments"遇到一個問題,一直無法解決.
    http://developer.android.com/training/basics/fragments/index.html
    這個教學有一個sample program,下載FragmentBasics.zip後,我把它Import到ADT中可以順利build出來,但在執行時總是會出現"很抱歉,Fragment Basics已停止"
    但我一直找不出問題出在哪裡.不知你可以下載這個範例試試嗎?
    感恩!

    回覆刪除
    回覆
    1. Hi,
      你好。我還沒下載這個範例,但也許你可以試著把 exception 完整的貼上來。

      一般而言,我們除錯都是靠 log 來判別,也許可以用這個機會,讓我們一起研究一下怎麼分析 log。

      你說如何呢?

      刪除

熱門文章