9

アプリの設定ページを作成しています

API-14 以降では、switchpreference が利用可能です。API14以降のデバイスでcheckboxpreferenceを置き換えるために使用したいと思います

使いやすく、正しいxmlリソースを取得するのres/xmlは簡単ですres/xml-14

ただ、コーディング部分で、APIに合わせて設定を切り替えるのはあまり便利ではありません。

public class SettingActivity extends PreferenceActivity {
    private CheckBoxPreference enable;
    private SwitchPreference enablev14;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        addPreferencesFromResource(R.xml.setting);
        if (Build.VERSION.SDK_INT < 14)
            enable = (CheckBoxPreference) findPreference(key_enable);
        else
            enablev14 = (SwitchPreference) findPreference(key_enable);
    }
    ...
}

今私の方法は、 if-clause を使用して をチェックしBuild.VERSION、対応するオブジェクトを取得して処理することです。しかし、コードを管理するのは非常に不便で困難です。誰かがそれを行うためのよりスマートな方法を持っていますか?

4

3 に答える 3

14

android:key次のように、SwitchPreference と CheckBoxPreference xml の両方に属性を設定できます。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="pref_sync"
        android:title="@string/pref_sync"
        android:defaultValue="true" />
</PreferenceScreen>

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference
        android:key="pref_sync"
        android:title="@string/pref_sync"
        android:defaultValue="true" />
</PreferenceScreen>

次に、このキーがコードで true または false を返すかどうかを次のように確認できます。

public class SettingActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    addPreferencesFromResource(R.xml.setting);
    PreferenceManager preferenceManager = getPreferenceManager();
    if (preferenceManager.getSharedPreferences().getBoolean("pref_sync", true)){
        // Your switch is on
    } else {
        // Your switch is off
    }
    ...
}

これがうまくいくことを願っています。

于 2013-08-24T02:46:20.950 に答える
6

Java コードでは、とTwoStatePreferenceの両方の親クラスである を使用します。ユースケースで必要になる可能性のあるすべてのメソッドが含まれています。CheckBoxPreferenceSwitchPreference

提供されたコード サンプルは次のようになります。

public class SettingActivity extends PreferenceActivity {
    private TwoStatePreference enable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        addPreferencesFromResource(R.xml.setting);
        enable = (TwoStatePreference) findPreference(key_enable);
    }
    ...
}
于 2015-04-11T13:32:51.320 に答える
1

コードが設定インスタンスで何をしたいかによってPreferenceは、特定の派生型の代わりにキャストするのと同じくらい簡単かもしれません。

enable = (Preference)findPreference(key_enable);

これにより、次のようなことが可能になります。

enable.setEnabled(true);

コード内で API レベルをチェックする必要がなくなります。

于 2013-09-04T03:27:48.647 に答える