我正在创建一个在actionbarsherlock中有一个菜单项的程序。现在我希望用户每天点击一次该菜单,不再需要。我怎么能做到这一点?这是我到目前为止所做的:
int hour = today.get(Calendar.HOUR_OF_DAY);
if (hour < 24) {
try {
if (gotGenders.contentEquals("Male")) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(
Monitor.this);
alertDialog.setTitle(gotNames);
alertDialog.setMessage("You are currently burning "
+ caloriesForMen() + " calories per hour");
alertDialog.setPositiveButton("Save",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
}
});
alertDialog.setNegativeButton("Discard",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
alertDialog.setCancelable(false);
showAlertDialog = alertDialog.create();
showAlertDialog.show();
}
else if (gotGenders.contentEquals("Female")) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(
Monitor.this);
alertDialog.setTitle(gotNames);
alertDialog.setMessage("You are currently burning "
+ caloriesForWomen() + " calories per hour");
alertDialog.setPositiveButton("Save",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
// dialog.dismiss();
}
});
alertDialog.setNegativeButton("Discard",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
alertDialog.setCancelable(false);
showAlertDialog = alertDialog.create();
showAlertDialog.show();
count = 1;
}
} catch (Exception ex) {
ex.printStackTrace();
AlertDialog.Builder errorDialog = new AlertDialog.Builder(
Monitor.this);
errorDialog.setTitle("No User Selected!");
// errorDialog.setMessage("You are currently burning " +
// caloriesForWomen() + " per hour");
errorDialog.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
errorDialog.setCancelable(false);
errorAlertDialog = errorDialog.create();
errorAlertDialog.show();
}
} else {
count = 0;
AlertDialog.Builder waitDialog = new AlertDialog.Builder(
Monitor.this);
waitDialog.setTitle("Wait after the day is over");
waitDialog.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
waitDialog.setCancelable(false);
waitAlertDialog = waitDialog.create();
waitAlertDialog.show();
}
这允许我多次选择菜单,如何将其限制为每天只能点击一次?感谢您的任何帮助。
答案 0 :(得分:2)
要实现这一点,你应该在某个地方存储上次访问的日期(db,sharedpreferences,在文件中),然后:
long lastVistedDateTime = getLastVistedDateTime();
int lastDay = new Date(lastVistedDateTime).getDay();
int today = Calendar.get(Calendar.DATE);
if (today != lastDay){
//an other day
setLastVistedDateTime(Calendar.getInstance().getTimeInMillis());
}
要将日期与当前区域设置进行比较,请使用:
String lastDate = DateFormat.getDateInstance(DateFormat.MEDIUM).format(new Date(lastVistedDateTime));
String nowDate = DateFormat.getDateInstance(DateFormat.MEDIUM).format(new Date());
if (!nowDate.equals(lastDate)){
//an other day
setLastVistedDateTime(Calendar.getInstance().getTimeInMillis());
}
答案 1 :(得分:2)
我认为一般来说gezdy的答案有正确的方法,但我想提出一个简化方法。
Calendar.DAY_OF_YEAR http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#DAY_OF_YEAR
为您提供一年中的当前日期(1-365)。因此,不是用毫秒进行任何数学计算,只需获取该值并存储它,并在后续尝试中进行比较。应该将gezdy的答案中的代码减少到大约3行(同时做同样的事情)。
唯一可能的缺点是