java - 每天仅从 Android ListView 中为用户验证一次

标签 java android alarmmanager countdowntimer

我需要使用 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/

相关文章:

java - 结合 jMockit 的测试覆盖率报告

java - 如何在 ImageView 中显示视频缩略图?

android - PowerManager.goToSleep() 出现问题

java - Android:在alarmmanager触发的服务中使用唤醒锁

java - Hibernate - 如何根据另一个对象的属性对结果进行排序

java - RichTextFX 的撤消功能无法正常工作

Android ACTION_MOVE 阈值

android - PinchToZoom 不适用于 Android 中的多个 Activity

android - 如何自动启动 AlarmManager 以启动计划 Activity ?

java - 查看AlarmManager中现有PendingIntent的时间