1

问题是 Toast 出现的次数与您打开设置活动的次数一样多,而每次单击 CheckBox 后我只需要一次。

在此先感谢所有尝试改进我的代码的人。

代码如何工作的更详细描述:

  • 我去设置活动并选中一个框
  • Toast 出现一次
  • 我使用“后退”按钮返回上一个活动,什么也不做,再次返回“设置”活动并选中一个框。
  • Toast 出现两次
  • 我使用“后退”按钮返回上一个活动,什么也不做,再次返回“设置”活动并选中一个框。
  • Toast 出现 3 次
  • 等等

    public class PrefActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_screen);
        Context context = getApplicationContext();
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
        settings.registerOnSharedPreferenceChangeListener(this);
    }
    
    public void onSharedPreferenceChanged(SharedPreferences settings, String key) {
        Toast mToast;
        mToast = Toast.makeText(this, "toast text", Toast.LENGTH_SHORT);
        if(key.equals("checkbox_key")){
            mToast.show();
        }
    }
    

    }

4

1 回答 1

0

当你离开活动时,你应该调用settings.unregisterOnSharedPreferenceChangeListener()你的方法。onPause()我建议打电话给settings.registerOnSharedPreferenceChangeListener()你,onResume() callback而不是onCreate().

于 2016-03-17T15:27:23.487 回答