39

を使用して Android アプリケーションを実行していActionBarSherlockます。私の問題は、設定画面を作成することです。クラスのonBuildHeader()メソッドは、SherlockPreferenceActivitynerver と呼ばれます。

これは私のコードです

preference_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>

設定.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

    }


}
4

2 に答える 2

10

onBuildHeaders()API レベル 11 以上で実行している場合にのみ呼び出されます。addPreferencesFromResource()古いデバイスでは、従来のアプローチに戻ります。

古いバージョンの Android で API レベル 11+ および従来の設定をサポートする例については、このサンプル プロジェクトを参照してください。PreferenceFragment

具体的には、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()必要があります。この場合、私のサンプルには 2 つの設定ヘッダーがあり、したがって 2 つの設定 XML ファイルがあるため、両方を呼び出します。新しいデバイスでは、スーパークラスにチェーンするだけで、 への呼び出しがトリガーされます。addPreferencesFromResource() addPreferencesFromResource()onCreate()onBuildHeaders()

于 2013-06-25T10:46:55.780 に答える
3

onBuildHeaders() は、API レベル 11 以上で実行している場合にのみ呼び出されます。API レベル 11 以上で PreferenceFragment をサポートし、古いバージョンの Android で従来の設定をサポートする例については、github.com/commonsguy/cw-omnibus/tree/master/Prefs/FragmentsBC を参照してください。
– CommonsWare 12 年 6 月 7 日 11:06

@CommonsWare 回答時にこれを投稿してください。回答のこのコピーを削除できます。

于 2013-01-21T18:51:35.007 に答える