PreferenceFragment な実装でハマッた件
最初、PreferenceActivity だったかで云々、って思っていたのですが deplecated の嵐だったので、PreferenceFragment というヤツを使ってみたのですが、色々とヤられたので備忘録を残しておくことに。
面倒なので
最初に最新な実装を引用しときます。以下です。
package com.example.hoge; import android.app.ActionBar; import android.app.Activity; import android.os.Bundle; import android.preference.PreferenceFragment; import android.view.MenuItem; public class SCPreferences extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new HogePreferencesFragment()).commit(); ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } } public static class HogePreferencesFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } }
最初、HogePreferencesFragment は異なるソースファイルで管理されてました。あるいは、res/layout/ 配下のナニに直接 fragment な指定も入れておりました。
基本的には正常動作しているように見えたのですが、HomeButton な挙動に不具合、というか Fragment の中の onOptionsItemSelected メソドは呼び出されていなかったので、色々調べている内に、PreferenceFragment は Activity クラス内で static な内部クラスとして実装すべき、という情報に行きあたった次第です。
上記実装で ActionBar なボタンについては正常に動作していることを確認できてます。