2017-02-06 6 views
0

ブロードキャスト受信機を使用して、24時間ごとに自分のフラグメント内の変数の値を変更しました。共有設定値が2回目に更新されません

フラグメントの再起動時に変数の値が以前の初期化に再初期化されるため、共有プリファレンスを使用して毎回値を保存して何度も再初期化しません。

値は一度変更され、再度更新されないという問題があります。その値が10であれば、それを11に変更しますが、その後12

にならないこれはこれはBroadcastReceiverから値を取得するためにフラグメントに使用EventBus機能である放送受信機

public class AlarmReciever extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 

    String intentImageName = intent.getStringExtra("imageName"); 
    int numberImageName = Integer.parseInt(intentImageName) +1; 
    EventBus.getDefault().post(new ImageNameEvent(""+numberImageName));; 

} 

です

@Subscribe 
public void onEvent(ImageNameEvent event) { 
    imagename = Integer.parseInt(event.getMessage()); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putInt("image", imagename); 
    editor.apply(); 
} 

これは、共有設定の値が取得されるフラグメントののonCreate関数です。

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    scheduleAlarm(); 

    preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    int name = preferences.getInt("image", 0); 
    if (name != 0) { 
     imagename = name; 
    } 
} 

助けてください。

+0

これにSharedPreferenceChangeListenerを使用することを検討しましたか? –

答えて

0

editor.apply()の代わりにeditor.commit()を使用してください。 本当に理由はわかりませんが、それは私のために働いていました。

1

editor.apply()を使用すると、非同期処理が行われ、何も返されません。 editor.commit()は同期ではなく、保存が機能する場合はtrueを返し、それ以外の場合はfalseを返します。

ドキュメントhere

だから、commit()apply()を変更し、それが真か偽を返すかどうかを確認しようとすることができます。

関連する問題