Android 4.0 の ApiDemos でさまざまな設定アクティビティを試してみると、たとえば、PreferencesFromCode.java で一部のメソッドが非推奨になっていることがコード内でわかります。
そこで質問ですが、PreferenceFragment を使用すると、すべてのバージョンで機能しますか、それとも 3.0 または 4.0 以上でのみ機能しますか?
もしそうなら、2.2 と 2.3 でも動作するものは何を使用すればよいでしょうか?
ベストアンサー1
PreferenceFragment
2.2 および 2.3 では動作しません (API レベル 11 以上のみ)。最高のユーザー エクスペリエンスを提供しながら、古い Android バージョンもサポートしたい場合は、2 つのPreferenceActivity
クラスを実装し、実行時にどちらを呼び出すかを決定するのがベスト プラクティスのようです。ただし、この方法では非推奨の API の呼び出しが依然として含まれますが、これを回避することはできません。
たとえば、次のようなものがありますpreference_headers.xml
:
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
<header android:fragment="your.package.PrefsFragment"
android:title="...">
<extra android:name="resource" android:value="preferences" />
</header>
</preference-headers>
そして標準preferences.xml
(下位の API レベルからあまり変わっていません):
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="...">
...
</PreferenceScreen>
次に、次の実装が必要ですPreferenceFragment
:
public static class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
最後に、PreferenceActivity
をサポートする API レベルと をサポートしない API レベルに応じて、の 2 つの実装が必要になりますPreferenceFragments
。
public class PreferencesActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
addPreferencesFromResource(R.xml.other);
}
}
そして:
public class OtherPreferencesActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
ユーザーに設定画面を表示する時点で、どれを開始するかを決定します。
if (Build.VERSION.SDK_INT < 11) {
startActivity(new Intent(this, PreferencesActivity.class));
} else {
startActivity(new Intent(this, OtherPreferencesActivity.class));
}
つまり、基本的にはフラグメントごとに xml ファイルがあり、API レベル < 11 の場合はこれらの各 xml ファイルを手動で読み込み、両方のアクティビティで同じ設定を使用します。