正しく機能するonSharedPreferencesChangeListenerを作成しました。リスナーをセットアップするときにリスナーをログに記録し、変更がトリガーされるため、これを知っています。
ただし、キー変数を切り替えようとしたときにエラーが発生したため(文字列を切り替えるには、JRE 1.7以降が必要であると言っています)、if-elseifステートメントに変更しました。
if-elseifステートメントがトリガーされなかったので、最初の2つをifステートメントに変更し、その後にelseifを配置しました(elseifが問題であった可能性があると考えています)。まだトリガーはありません。
奇妙なことに、イベントトリガーをログに記録すると、文字列として " " + key + " "が出力され、キー値はテストしている正確な文字列になります。
これが私のコードです、誰かが私を正しい方向に向けることができますか?
// logic for action when a shared preference is changed.
prefs.registerOnSharedPreferenceChangeListener( new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
String TAG = "UltimateScoreboard";
if (key == "Main_Clock_Minutes") {
msMainClockStart = Long.valueOf( prefs.getString( "Main_Clock_Minutes", "0" ) ) * 60000;
Log.i( TAG, key + " changed: " + String.valueOf(msMainClockStart) );
}
if ( key == "Use_ShotClock" ) {
useShotClock = prefs.getBoolean( "Use_ShotClock", false );
if( useShotClock )
btnShotClock.setVisibility( View.VISIBLE );
else
btnShotClock.setVisibility( View.INVISIBLE );
Log.i( TAG, key );
}
else if ( key == "Shot_Clock_Seconds" ) {
msShotClockStart = Long.valueOf( prefs.getString( "Shot_Clock_Seconds", "0" ) ) * 1000;
Log.i( TAG, key + " changed: " + Long.valueOf(msShotClockStart) );
}