android - onPreferenceClick 和 OnPreferenceClickListener

标签 android

我正在尝试在我的java代码中评估我的偏好,以便启用/禁用其他选项,如果他们选择不执行其他选项...到目前为止,我试图只实现OnPreferenceClickListener,但是我从未看到过 toast 免受变化。我究竟做错了什么?似乎还有很多类似的其他问题,但我看不到引用它们的错误。

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;
    }

}

最佳答案

您必须为每个单独的首选项注册 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(......
}
}

关于android - onPreferenceClick 和 OnPreferenceClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16449372/

相关文章:

android 权限 vs linux 权限

android - 尽管尝试了一切,SMSManager 仍返回 RESULT_ERROR_GENERIC_FAILURE

java - 扫描可用的 wifi,检测特定的最强 Wifi SSID 以启动 XML Activity 布局

android - 如何静音 BluetoothDevice 日志?

android - RXJava Observable 在主线程而不是后台线程上执行

android - 当按下耳机按钮时,我们如何禁用 android 手机中音乐播放器的启动?

android - 可视化工具 onFftDataCapture - byte[] 索引是否代表频率?

java - RxJava 将一个 Observable 拆分为两个 subObservable

android - NavigationDrawer Activity 充斥着 fragment 回调和应用程序业务逻辑

android - 如何在 QuickBlox municate android 中通过 Id 获取聊天对话框?