Android 如何使按钮一天只能点击一次

Android 如何使按钮一天只能点击一次,android,button,click,Android,Button,Click,我有一个按钮,顾客可以通过它领取每日奖励。我希望每天只点击一次按钮。我怎么能这样做 我不知道如何实现这个功能 我知道我可以将其设置为“视图”。已消失,但我希望它在第二天再次可见。单击按钮可以获得一天的时间,该如何设置 点击我的按钮,我该怎么办 @Override public void onClick(View v) { super.onClick(v); switch (v.getId()) { case R.id.creditClaimBT: { b

我有一个按钮,顾客可以通过它领取每日奖励。我希望每天只点击一次按钮。我怎么能这样做

我不知道如何实现这个功能

我知道我可以将其设置为“视图”。已消失,但我希望它在第二天再次可见。单击按钮可以获得一天的时间,该如何设置

点击我的按钮,我该怎么办

@Override
public void onClick(View v) {
    super.onClick(v);
    switch (v.getId()) {
    case R.id.creditClaimBT: {

        break;
    }
    }
}

非常感谢您的帮助

单击按钮时,将事件日期写入SharedReferences。如果有人单击该按钮,请检查当前日期是否已保存在SharedReferences中。完成。

单击按钮时,将事件日期写入SharedReferences。如果有人单击该按钮,请检查当前日期是否已保存在SharedReferences中。完成。

我认为最好的方法是像ZerO这样的共享引用。例如,每次用户打开按钮所在的活动时,请检查SharedPref,例如,您可以在其中保存日期。单击按钮后,保存当前日期。每次打开“活动”且保存的日期等于当前日期时,不允许单击按钮(您可以使用View.GONE或setEnabled(false)执行此操作):

初始化这些以在onCreate()中设置全局变量:

用你的方法检查时间:

  private void checkPrefs(){


      if(firstTimeUsed==false){
      if(savedDate>0){

      //create two instances of Calendar and set minute,hour,second and millis
      //to 1, to be sure that the date differs only from day,month and year

      Calendar currentCal = Calendar.getInstance();
      currentCal.set(Calendar.MINUTE,1);
      currentCal.set(Calendar.HOUR,1);
      currentCal.set(Calendar.SECOND,1);
      currentCal.set(Calendar.MILLISECOND,1);

      Calendar savedCal = Calendar.getInstance();
      savedCal.setTimeInMillis(savedDate); //set the time in millis from saved in sharedPrefs
      savedCal.set(Calendar.MINUTE,1);
      savedCal.set(Calendar.HOUR,1);
      savedCal.set(Calendar.SECOND,1);
      savedCal.set(Calendar.MILLISECOND,1);

      if(currentCal.getTime().after(savedCal.getTime()){

        mButton.setVisibility(View.VISIBLE);
      }else if(currentCal.getTime().equals(savedCal.getTime()){

          mButton.setVisibility(View.GONE);
     }

   }
 }else{

     //just set the button visible if app is used the first time

      mButton.setVisibility(View.VISIBLE); 

  }

}
每次按钮可用并单击时,将日期保存回sharedPrefs:

       private void saveClickedTime(){

       Editor mEditor = mPrefs.edit();
       Calendar cal = Calendar.getInstance(); 
       long millis = cal.getTimeInMillis();
       mEditor.putLong(buttonClickedKey,millis);
       mEditor.putBoolean(firstTimeUsedKey,false); //the button is clicked first time, so set the boolean to false.
       mEditor.commit();

       //hide the button after clicked
       mButton.setVisibility(View.GONE);

      }

这只是从零开始的,目前还没有测试过,但应该会让你知道如何做到这一点。

我认为最好的方法是使用像ZerO说的SharedReference。例如,每次用户打开按钮所在的活动时,请检查SharedPref,例如,您可以在其中保存日期。单击按钮后,保存当前日期。每次打开“活动”且保存的日期等于当前日期时,不允许单击按钮(您可以使用View.GONE或setEnabled(false)执行此操作):

初始化这些以在onCreate()中设置全局变量:

用你的方法检查时间:

  private void checkPrefs(){


      if(firstTimeUsed==false){
      if(savedDate>0){

      //create two instances of Calendar and set minute,hour,second and millis
      //to 1, to be sure that the date differs only from day,month and year

      Calendar currentCal = Calendar.getInstance();
      currentCal.set(Calendar.MINUTE,1);
      currentCal.set(Calendar.HOUR,1);
      currentCal.set(Calendar.SECOND,1);
      currentCal.set(Calendar.MILLISECOND,1);

      Calendar savedCal = Calendar.getInstance();
      savedCal.setTimeInMillis(savedDate); //set the time in millis from saved in sharedPrefs
      savedCal.set(Calendar.MINUTE,1);
      savedCal.set(Calendar.HOUR,1);
      savedCal.set(Calendar.SECOND,1);
      savedCal.set(Calendar.MILLISECOND,1);

      if(currentCal.getTime().after(savedCal.getTime()){

        mButton.setVisibility(View.VISIBLE);
      }else if(currentCal.getTime().equals(savedCal.getTime()){

          mButton.setVisibility(View.GONE);
     }

   }
 }else{

     //just set the button visible if app is used the first time

      mButton.setVisibility(View.VISIBLE); 

  }

}
每次按钮可用并单击时,将日期保存回sharedPrefs:

       private void saveClickedTime(){

       Editor mEditor = mPrefs.edit();
       Calendar cal = Calendar.getInstance(); 
       long millis = cal.getTimeInMillis();
       mEditor.putLong(buttonClickedKey,millis);
       mEditor.putBoolean(firstTimeUsedKey,false); //the button is clicked first time, so set the boolean to false.
       mEditor.commit();

       //hide the button after clicked
       mButton.setVisibility(View.GONE);

      }


这只是从零开始的,目前还没有测试过,但应该可以让您知道如何做到这一点。

除了此之外,还有其他选择吗?如果您不想让人们只是更改手机的日期,请验证服务器端@哥们,为什么,这是一个很好的方法。你能举个例子说明如何做到这一点吗?我知道这是一个好方法,但我没有使用过偏好。我应该在点击按钮时写偏好,就像每次点击按钮时一样,它会重新写其他选项,而不是除此之外。如果你不想让人们只是更改他们手机的日期,在服务器端进行验证@哥们,为什么,这是一个很好的方法。你能发布一个关于如何做到这一点的例子吗?我知道这是一个好方法,但我没有使用首选项。是的,我应该在点击按钮时写首选项,就像每次点击按钮时一样。它会再次写首选项。不过,在哪里设置首选项的初始日期呢?我做了一些变通。放置一些布尔值以检查这是否是第一次使用应用程序。这是第一次,sharedPrefs中没有保存任何值,因此您将获得默认值true(请参阅boolean firstTimeUsed)。如果为真,则将按钮设置为直接可见。在单击按钮时,将值始终设置为false,这样在第一次单击按钮后,您就永远不会得到true值(如果用户有root用户,则希望用户删除应用程序或共享引用)。为什么不存储
currentTimeMillis()
,并检查差值是否大于
86400000
。。启用按钮并重置。最初,当活动首次启动时,在
getLong(,0)
中给出一个默认值0,原因是,如果我只使用currentTimeInMillis,那么如果我检查的值大于86400000,则按钮单击与时间相关。例如,用户在下午12:13点单击,第二天下午12:13点后该按钮才可单击。我不认为这是这个想法的目标,但在我的偏好中,在哪里设置初始日期我做了一些变通。放置一些布尔值以检查这是否是第一次使用应用程序。这是第一次,sharedPrefs中没有保存任何值,因此您将获得默认值true(请参阅boolean firstTimeUsed)。如果为真,则将按钮设置为直接可见。在单击按钮时,将值始终设置为false,这样在第一次单击按钮后,您就永远不会得到true值(如果用户有root用户,则希望用户删除应用程序或共享引用)。为什么不存储
currentTimeMillis()
,并检查差值是否大于
86400000
。。启用按钮并重置。最初,当活动首次启动时,在
getLong(,0)
中给出一个默认值0,原因是,如果我只使用currentTimeInMillis,那么如果我检查的值大于86400000,则按钮单击与时间相关。例如,用户在下午12:13点单击,第二天下午12:13点后该按钮才可单击。我认为这不是目标