我需要使用 Android 中的计时器或闹钟管理器验证用户每天仅选择一项。有没有更好的方法来设计它,以便可以轻松检查用户是否每天获得的元素不超过一件。我在 ListView 中显示了包含十个项目的列表。用户从列表中获取一个项目。他应该只得到一件元素。如果他再次尝试,则应该每天仅提醒他一次该项目。
公共(public)类 MainActivity 扩展 Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Effects.getInstance().init(this);
ListView lv = (ListView) findViewById(R.id.listView);
List<ItemDetail> itemList = createItems(10);
// Load animation
final Animation anim = AnimationUtils.loadAnimation(this, R.anim.fade_anim);
final ArrayAdapter<ItemDetail> aAdpt = new ArrayAdapter<ItemDetail>(this, android.R.layout.simple_list_item_1,
itemList);
lv.setAdapter(aAdpt);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, final View view, final int position, long id) {
MediaPlayer mPlayer = MediaPlayer.create(MainActivity.this, R.raw.gum_bubble_pop);
mPlayer.start();
anim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
long now = System.currentTimeMillis();
long lastCheckedMillis = 0;
long diffMillis = now - lastCheckedMillis;
if( diffMillis >= (3600000 * 24) ) {
// store now (i.e. in shared prefs)
// do the check
} else {
// too early
}
if(aAdpt.getCount()==9) {
Toast.makeText(MainActivity.this, "You can get only one gift per day "+now, Toast.LENGTH_LONG).show();
}
else {
ItemDetail item = aAdpt.getItem(position);
aAdpt.remove(item);
}
}
});
view.startAnimation(anim);
}
});
}
private List<ItemDetail> createItems(int size) {
List<ItemDetail> result = new ArrayList<ItemDetail>();
for (int i = 0; i < size; i++) {
ItemDetail item = new ItemDetail(i, "Gift " + (i + 1));
result.add(item);
}
return result;
}
}
最佳答案
你试过这个吗
Calendar c = Calendar.getInstance();
int hours = c.get(Calendar.HOUR_OF_DAY);
int minutes = c.get(Calendar.MINUTE);
int seconds = c.get(Calendar.SECOND);
if(hours*3600 + minutes*60 + seconds < 1800){
// Day changed since last task
}
由于触发器每 30 分钟循环一次,此代码将检查时间是否在午夜和午夜半之间。因此,将此代码放入触发器中,并在 if 内写入您希望在自上次循环运行以来日期发生变化时执行的代码。
关于java - 每天仅从 Android ListView 中为用户验证一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275412/