2

他のオプションを実行しないことを選択した他のオプションを有効/無効にするために、Javaコードで自分の設定を評価しようとしています...これまでのところ、OnPreferenceClickListenerのみを実装しようとしていますが、変化します。私は何を間違っていますか?このような質問は他にもたくさんあるようですが、それらに関する私のエラーはわかりません。

public class UserSettingActivity extends PreferenceActivity implements OnPreferenceClickListener{
    SharedPreferences mPreferences;
    Boolean frequency;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);
    }


    @Override
    public boolean onPreferenceClick(Preference preference) {
        mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        frequency = mPreferences.getBoolean("frequency", true);

        Context context = getApplicationContext();
        Toast.makeText(context, "Hello toast 0!", Toast.LENGTH_LONG).show();

        if (!frequency) {
            Context context2 = getApplicationContext();
            Toast.makeText(context2, "Hello toast 1!", Toast.LENGTH_LONG).show();

        } else if (preference.getKey().equals("schedulestop")) {

        } else if (preference.getKey().equals("priority")) {

        } else {
            Context context3 = getApplicationContext();
            Toast.makeText(context3, "Hello toast 0!", Toast.LENGTH_LONG).show();
        }
        return false;
    }

}
4

2 に答える 2

4

個々の設定ごとに PreferenceClickListener に登録する必要があります

somePreference.setOnPreferenceClickListener(this);  

または、すべての設定に使用できますgetSharedPreferences().registerOnSharedPreferenceChangeListener

public class UserSettingActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{
SharedPreferences mPreferences;
Boolean frequency;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
}

@SuppressWarnings("deprecation")
@Override
protected void onPause()
{
    super.onPause();

    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}

@SuppressWarnings("deprecation")
@Override
protected void onResume()
{
    super.onResume();

    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}


@SuppressWarnings("deprecation")
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (key.equals("schedulestop")) {
         // do something
     }
     else if (key.equals(......
}
}
于 2013-05-08T20:28:15.070 に答える
1

最初に「OnSharedPreferenceChangeListener」を実装します

PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener

それで

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    settings.registerOnSharedPreferenceChangeListener(this);

}

それから

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

    switch (key) {
        case "pref_key_auto_delete":
            boolean notificationStatus = SP.getBoolean(key, false);
            Log.d("stat", String.valueOf(notificationStatus));
            break;

        case "pref_key_notification_list":
            String downloadType = SP.getString(key, "n/a");
            Log.d("stat", String.valueOf(downloadType));
            break;
    }
于 2015-08-04T08:39:01.020 に答える