为什么 Toast 出现的次数比我需要的多?
Why Toast appears more times than I need?
问题是 Toast 出现的次数与您打开设置 activity 的次数一样多,而我每次单击 CheckBox 后只需要一次。
提前感谢所有试图改进我的代码的人。
代码工作原理的更详细描述:
- 我转到“设置”activity 并选中一个框
- 吐司出现一次
- 我 return 使用后退按钮回到上一个 activity,什么都不做,return 再次进入设置 activity 并选中一个框。
- 吐司出现两次
- 我 return 使用后退按钮回到上一个 activity,什么都不做,return 再次进入设置 activity 并选中一个框。
- 吐司出现三次
以此类推
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();
}
}
}
离开 Activity 时,您应该在 onPause()
方法中调用 settings.unregisterOnSharedPreferenceChangeListener()
。我建议在 onResume() callback
中调用 settings.registerOnSharedPreferenceChangeListener()
而不是 onCreate()
.
问题是 Toast 出现的次数与您打开设置 activity 的次数一样多,而我每次单击 CheckBox 后只需要一次。
提前感谢所有试图改进我的代码的人。
代码工作原理的更详细描述:
- 我转到“设置”activity 并选中一个框
- 吐司出现一次
- 我 return 使用后退按钮回到上一个 activity,什么都不做,return 再次进入设置 activity 并选中一个框。
- 吐司出现两次
- 我 return 使用后退按钮回到上一个 activity,什么都不做,return 再次进入设置 activity 并选中一个框。
- 吐司出现三次
以此类推
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(); } }
}
离开 Activity 时,您应该在 onPause()
方法中调用 settings.unregisterOnSharedPreferenceChangeListener()
。我建议在 onResume() callback
中调用 settings.registerOnSharedPreferenceChangeListener()
而不是 onCreate()
.