0

我需要一些关于我正在处理的 android 项目的帮助。我正在尝试使用切换首选项来发送特定文本。基本上,如果用户将开关从关闭切换到打开,我希望手机发送一条说“打开”的文本。然后,当用户将开关从打开转到关闭时,它会发送一条文本说“关闭”。我所需要的只是能够查看开关的当前状态,然后如果它关闭,则调用“打开”方法,反之亦然。

我从来没有问过这样的问题,所以我真的不知道要发布我的代码的哪一部分。(如果被问到,我可以发布我的大部分代码。)我认为这与 onPreferenceChangeListener 有关,但是我不确定如何实现它。有任何想法吗?

编辑:这是主要的活动类:

public class MainActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {

public static final String KEY_ROOM1_SWITCH = "switch_room_1";

private SwitchPreference mSwitchPreference1;

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
//This is a sample of one of 4 switches that are being used. They are all basically the same, but with different variables
    if (key.equals(KEY_ROOM1_SWITCH)) {
        boolean checkedornot1;
        SharedPreferences myPreference=PreferenceManager.getDefaultSharedPreferences(this);
        checkedornot1 = myPreference.getBoolean("switch_room_1", false);
        if (checkedornot1 = true)
        mSwitchPreference1.setChecked(true);
        else
        mSwitchPreference1.setChecked(false);
    }
  }
}

我是否需要获取存储在共享首选项中的值并据此做出选择?还是我还缺少其他东西?

4

1 回答 1

0
  1. 编辑扩展 PreferenceActivity 的类并添加私有变量:private OnSharedPreferenceChangeListener listener;

  2. 在方法中创建并注册您的侦听器onResume

      public void onResume() {
      super.onResume();
      listener = new OnSharedPreferenceChangeListener() {
        public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
          if (key.contains("your switchpreference key name")
          if (sp.getBoolean("your switchpreference key name",false) {
            sendOnSMS();
          } else {
            sendOffSMS();
          }
      }
      PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(listener);
    }
    
  3. 在方法中取消注册您的侦听器onPause

    public void onPause() {
      super.onPause();
      PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(listener);
    }
    
  4. 实现sendOnSMSsendOffSMS方法。

于 2013-02-02T05:15:59.610 回答