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点后该按钮才可单击。我认为这不是目标