ActionBarSherlock
を使用してAndroidアプリケーションを実行しています。私の問題は、設定画面を作成することです。SherlockPreferenceActivity
クラスのonBuildHeader()
メソッド神経質と呼ばれています。
これは私のコードです
preferences_headers.xml
<preference-headers xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<header
Android:fragment="package.fragments.MyPreferenceFragment"
Android:icon="@drawable/bulle"
Android:summary="An example of some preferences."
Android:title="title" />
</preference-headers>
preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:title="@string/options" >
<PreferenceCategory>
<SwitchPreference
Android:id="@+id/cb_notif"
Android:defaultValue="false"
Android:key="com.vincent.HTC_Dev.pref.notif"
Android:summaryOff="@string/notifications_off"
Android:summaryOn="@string/notifications_on"
Android:title="@string/notifications" />
</PreferenceCategory>
</PreferenceScreen>
MyPreferenceActivity
public class MyPreferenceActivity extends SherlockPreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
MyPreferenceFragment
public class MyPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// TODO Auto-generated method stub
}
}
onBuildHeaders()
は、APIレベル11以上で実行している場合にのみ呼び出されます。古いデバイスでは、従来のaddPreferencesFromResource()
アプローチに戻ります。
APIレベル11以降でPreferenceFragment
をサポートする例と、古いバージョンのAndroidで従来の設定をサポートする例については、 このサンプルプロジェクト を参照してください。
具体的には、そのSherlockFragmentActivity
は次のようになります。
_package com.commonsware.Android.preffragsbc;
import Java.util.List;
import Android.os.Build;
import Android.os.Bundle;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
public class EditPreferences extends SherlockPreferenceActivity {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB) {
addPreferencesFromResource(R.xml.preferences);
addPreferencesFromResource(R.xml.preferences2);
}
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
_
onCreate()
では、onlydo addPreferencesFromResource()
if古いデバイスを使用しています。この場合、私のサンプルには2つの設定ヘッダーがあり、したがって2つの設定XMLファイルがあるため、両方でaddPreferencesFromResource()
を呼び出します。新しいデバイスでは、onCreate()
はスーパークラスにチェーンするだけで、onBuildHeaders()
の呼び出しがトリガーされます。
onBuildHeaders()は、APIレベル11以降で実行している場合にのみ呼び出されます。 APIレベル11以降でPreferenceFragmentをサポートし、古いバージョンのAndroidで従来の設定をサポートする例については、github.com/commonsguy/cw-omnibus/tree/master/Prefs/FragmentsBCを参照してください。
– CommonsWare 2012年6月7日11:06
@CommonsWareはあなたが答えるときにこれを投稿してくれませんか?私はあなたの答えのこのコピーを削除することができます。