据说我有一个名为floatValue的sharedpreferences浮点值。当设备检测到新的一天时,如何将floatValue自动设置为0?例如今天是2/1/17,并且floatValue的值是1250.23。是否可以将其重置为0并且我的textView将显示0,这样当用户在第二天早上醒来时,他会注意到textview的文本为0。
我很抱歉这些缩进。基本上,我将newTodayFloatValue初始化为0,因为我今天需要将ValueToBeAdded附加到newTodayFloatValue。然后我将此值保存到SharedPreferences中!但是我希望在date_changed之后可以重置它。
float newTodayFloatValue = 0;
tvTodayFloatValue = (TextView)findViewById(R.id.todayfloatValueTextView);
Intent intent1 = getIntent();
float todayValueToBeAdded = intent1.getFloatExtra("strValueToBeAdded", 0.0f);
final SharedPreferences totalTodayfloatValue = getSharedPreferences("totalTodayfloatValue", 0);
newTodayFloatValue = totalTodayfloatValue.getFloat("totalTodayfloatValue", 0);
newTodayFloatValue = newTodayFloatValue + todayValueToBeAdded;
SharedPreferences.Editor editor = totalTodayfloatValue.edit();
editor.putFloat("totalTodayfloatValue", newTodayFloatValue);
editor.commit();
tvTodayFloatValue.setText(String.valueOf(newTodayFloatValue));
答案 0 :(得分:2)
您可以使用带有操作的广播接收器
" android.intent.action.DATE_CHANGED"
只要日期自动更改(因为日期实际已更改)或用户明确更改日期,它就会触发。
即使您的应用程序未运行,也要接收此广播,您需要使用上述的Intent-Filter在清单中声明它。
<receiver
android:name=".DateChangeReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.DATE_CHANGED" />
</intent-filter>
</receiver>
然后在Receiver中,您可以在SharedPreferences
中进行更改public class DateChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences preferences = context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("YOUR_INT", 0);
editor.apply();
}
}
答案 1 :(得分:0)
有Android&#34;广播&#34;对于此类事件,如时间更改(ACTION_TIME_CHANGED)或日期更改(ACTION_DATE_CHANGED) 行动)。
答案 2 :(得分:0)
我认为有更简单的方法来实现这种效果。我会在方法getFloatValue(...)
中编写方法setFloatValue
和setFloatValue
,您不仅应更新floatValue
中的SharedPreferences
,还应更新floatValueLastModification
。
然后在getFloatValue
中,您应该将floatValueLastModification
与当前时间进行比较,如果是前一天则返回0。
当然,既然你这样做,你应该只通过这些方法访问这个floatValue
。
我认为阅读和理解这些代码要容易得多。