据说我有一个名为floatValue的共享首选项浮点值。当设备检测到是新的一天时,如何将 floatValue 自动设置为 0?例如,今天是 2/1/17,floatValue 的值是 1250.23。是否有可能将其重置为 0,并且我的 textView 将显示 0,以便当用户第二天早上醒来时,他会注意到文本视图的文本为 0。
我很抱歉缩进。基本上,我将newTodayFloatValue初始化为0,因为我需要todayValueToBeAdd附加到newTodayFloatValue中。然后我把这个值保存到共享首选项中!但我希望这可以在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));
您可以使用具有操作的广播接收器
"android.intent.action.DATE_CHANGED"
每当日期自动更改(因为日期实际已更改)或由用户显式更改时,它都会触发。
若要在应用未运行时接收此广播,需要使用上述意向筛选器在清单中声明它。
<receiver
android:name=".DateChangeReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.DATE_CHANGED" />
</intent-filter>
</receiver>
然后在接收器中,您可以在共享首选项中进行更改
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();
}
}
此类事件有Android"广播",例如时间更改(ACTION_TIME_CHANGED)或日期更改时(ACTION_DATE_CHANGED动作)。
请参阅相应的 javadoc 以获取进一步阅读。在这里,您可以找到有关如何使用广播的信息。
我认为有更简单的方法可以实现这种效果。我会在方法setFloatValue
中编写一个方法getFloatValue(...)
和setFloatValue
,您不仅应该在SharedPreferences
中更新floatValue
,而且还应该floatValueLastModification
更新。
那么在getFloatValue
中,您应该将floatValueLastModification
与当前时间进行比较,如果是前一天,则返回 0。
当然,由于您这样做,因此您应该仅通过这些方法访问此floatValue
。
我认为阅读和理解这样的代码会容易得多。