PreferenceActivity Android 4.0以前 質問する

PreferenceActivity Android 4.0以前 質問する

Android 4.0 の ApiDemos でさまざまな設定アクティビティを試してみると、たとえば、PreferencesFromCode.java で一部のメソッドが非推奨になっていることがコード内でわかります。

そこで質問ですが、PreferenceFragment を使用すると、すべてのバージョンで機能しますか、それとも 3.0 または 4.0 以上でのみ機能しますか?

もしそうなら、2.2 と 2.3 でも動作するものは何を使用すればよいでしょうか?

ベストアンサー1

PreferenceFragment2.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 ファイルを手動で読み込み、両方のアクティビティで同じ設定を使用します。

おすすめ記事