ボタンをクリックした後、一部の情報がSharedPreferences
に保存されてから次のアクティビティに進むまで待つ必要があります。 SharedPreferences.OnSharedPreferenceChangeListener()
を使用しようとしましたが、正しく動作しません。変更をコミットSharedPreferencesで保存コールバック
MapActivity
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (currentPosition != null) {
SharedPreferences preferences = PreferenceHelper.getPreferences(MapActivity.this);
SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.i(TAG,"key "+key);
Intent i = new Intent(MapActivity.this, MainActivity.class);
i.putExtra("coordinates", currentPosition);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
}
};
preferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener);
PreferenceHelper.saveLocation(MapActivity.this,currentPosition);
}
}
});
PreferencesHelper
public class PreferenceHelper {
public static SharedPreferences appPreference;
public static SharedPreferences getPreferences(Context context){
return context.getSharedPreferences(PREFERENCES_NAME,Context.MODE_PRIVATE);
}
public static void saveLocation(Context context,LatLng location){
appPreference=context.getSharedPreferences(PREFERENCES_NAME,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = appPreference.edit();
editor.putFloat(CURRENT_LOCATION_X, (float) location.latitude).apply();
editor.putFloat(CURRENT_LOCATION_Y, (float) location.longitude).apply();
editor.commit();
}
}
rは? – Bahu
はい、私はその方法を試してください – Expiredmind