2012/01/28

PreferenceActivityで一個だけPreferenceFragmentを表示する

PreferenceFragmentに対してHeader等を利用せずに一個だけPreferenceFragmentを表示したいと思ったが、中々実現できなかったのでメモ的に。(見た目とか気にしなければ、普通のActivityにトランザクションしても表示できてしまうのかもしれないけど、やってないので分からない)


PreferenceActivityのメソッドを見てみるとstartPreferenceFragment(Fragment, boolean)なんてものがあるのでこれを利用すれば出来るのかなと思ったけれど、トランザクションするView見つかんねーぞ(゚Д゚)ゴルァって怒られる。

これの原因は
全てこいつが悪い。先のメソッドは
この通りただのトランザクションなのに
こんな互換性用のレイアウトを設定してしまうためにR.id.prefsというフラグメントトランザクション用のViewが消失。PreferenceActivityで自分でトランザクションを管理するにはこのViewへの切り替えを抑制する必要がある。



長々と理由を説明しつつ、PreferenceActivityはonCreateで最初に
を読み込むため、 これで1PreferenceActivity-1PreferenceFragmentが出来る。onIsMultiPaneかonIsHidingHeadersのどちらかを上書きしないとタブレット表示時にマルチペインになってしまうかも知れないので、予防的上書き。
ちなみにinitialTitleは画面タイトル(Phoneはタイトル部、TabletはFragment上部のタイトル部分の左)、initialShortTitleはTabletでFragment上部のタイトル部分の右に表示される用のStringリソースIDだとかなんとか。