4.5
打卡功能实现
• 所花时间:5
• 代码行数:146
• 博客容量:1
• 代码如下:
package com.example.undertaking;
import androidx.appcompat.app.AppCompatActivity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.undertaking.TaskPackage.DayDAO;
import com.example.undertaking.TaskPackage.DayTask;
import com.example.undertaking.TaskPackage.WeekDAO;
import com.example.undertaking.util.DateUtil;
import com.example.undertaking.util.ToastUtil;
import java.util.Timer;
import java.util.TimerTask;
public class setTaskOfDay extends AppCompatActivity implements View.OnClickListener {
private TextView tv_name;
private EditText goal;
private SharedPreferences preferences;
private Button startButton;
private Button endButton;
private Button submit;
private Timer studyTimer; // 学习时间定时器
private int studyMinutes; // 学习分钟数
private DayTask dayTask;
private TextView studyTime;
// Handler 更新 UI
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
updateStudyTimeUI();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_task_of_day);
tv_name = findViewById(R.id.tv_name);
tv_name.setText("HELLO! " + MyApplication.user.name);
preferences = getSharedPreferences("task_status", MODE_PRIVATE);
goal = findViewById(R.id.et_goal);
submit = findViewById(R.id.bt_submit);
startButton = findViewById(R.id.bt_start);
endButton = findViewById(R.id.bt_end);
studyTime = findViewById(R.id.study_time);
startButton.setOnClickListener(this);
endButton.setOnClickListener(this);
submit.setOnClickListener(this);
dayTask = new DayTask();
dayTask.stuID = MyApplication.user.id;
dayTask.today_ = DateUtil.getDate();
dayTask.dayOfWeek = DateUtil.getDayOfWeek();
reload();
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.bt_start) {
startButton.setEnabled(false); // 禁用开始打卡按钮
saveButtonStatus("start");
Toast.makeText(this, "已开始打卡", Toast.LENGTH_SHORT).show();
dayTask.startTime = DateUtil.getTime();
// 启动定时器
startStudyTimer();
} else if (v.getId() == R.id.bt_end) {
endButton.setEnabled(false); // 禁用结束打卡按钮
saveButtonStatus("end");
Toast.makeText(this, "已结束打卡", Toast.LENGTH_SHORT).show();
dayTask.endTime = DateUtil.getTime();
dayTask.studyMinutes = studyMinutes;
submit.setEnabled(true);
stopStudyTimer();
} else if (v.getId() == R.id.bt_submit) {
dayTask.studyInfo = goal.getText().toString();
WeekDAO.WeekDaoRowListener weekDaoRowListener = new WeekDAO.WeekDaoRowListener() {
@Override
public void OperationCompletely(int result) {
WeekDAO.WeekFinishRateUpdate weekFinishRateUpdate=new WeekDAO.WeekFinishRateUpdate() {
@Override
public void OperationCompletely(Boolean result) {
if (!result){
ToastUtil.show(setTaskOfDay.this,"完成率更新失败");
}
}
};
WeekDAO.finishRateUpdate(String.valueOf(result), weekFinishRateUpdate);
dayTask.weekID = String.valueOf(result);
DayDAO.DayDaoInsertListener dayDaoInsertListener = new DayDAO.DayDaoInsertListener() {
@Override
public void OperationCompletely(boolean result) {
if (result) {
ToastUtil.show(setTaskOfDay.this, "提交成功");
submit.setEnabled(false);
} else {
ToastUtil.show(setTaskOfDay.this, "提交失败");
}
}
};
DayDAO.insert(dayTask, dayDaoInsertListener);
}
};
WeekDAO.getRowCount(MyApplication.user.id, weekDaoRowListener);
}
}
private void saveButtonStatus(String buttonType) {
// 获取今天的日期
String today = DateUtil.getDate();
// 保存按下状态到 SharedPreferences
SharedPreferences.Editor editor = preferences.edit();
if (buttonType.equals("start")) {
editor.putBoolean(today + "_start", true);
} else if (buttonType.equals("end")) {
editor.putBoolean(today + "_end", true);
}
editor.apply();
}
private void reload() {
// 获取今天的日期
String today = DateUtil.getDate();
// 检查开始和结束打卡按钮的状态并相应地禁用按钮
boolean isStartPressed = preferences.getBoolean(today + "_start", false);
boolean isEndPressed = preferences.getBoolean(today + "_end", false);
submit.setEnabled(false);
if (isStartPressed) {
startButton.setEnabled(false);
startStudyTimer(); // 如果开始打卡按钮已经按下,启动定时器
}
if (isEndPressed && isStartPressed) {
endButton.setEnabled(false);
}
if (isStartPressed && isEndPressed) {
tv_name.setText("今日学习打卡已完成!!");
}
}
private void startStudyTimer() {
studyTimer = new Timer();
studyMinutes = 0; // 初始化学习分钟数为0
// 定义一个定时任务,每分钟更新一次学习分钟数
studyTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
studyMinutes++; // 每次运行任务,学习分钟数加1
// 发送消息给 Handler,通知更新 UI
mHandler.sendEmptyMessage(1);
}
}, 60000, 60000); // 每隔一分钟执行一次任务
}
private void stopStudyTimer() {
if (studyTimer != null) {
studyTimer.cancel(); // 取消定时器
studyTimer = null;
}
}
private void updateStudyTimeUI() {
// 更新学习时间显示
studyTime.setText("学习时间:" + studyMinutes + "分钟");
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/mainBackground">
<TextView
android:id="@+id/tv_name"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello!!"
android:textSize="30sp"
android:textColor="@color/white"/>
<LinearLayout
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal">
<Button
android:background="@drawable/my_button"
android:id="@+id/bt_start"
android:layout_width="140dp"
android:layout_height="70dp"
android:text="学习开始打卡"
android:textColor="@color/white"
android:textSize="17sp"
/>
<Button
android:layout_marginLeft="130dp"
android:textSize="17sp"
android:background="@drawable/my_button"
android:id="@+id/bt_end"
android:layout_width="140dp"
android:layout_height="70dp"
android:text="学习结束打卡"
android:textColor="@color/white"
/>
</LinearLayout>
<TextView
android:id="@+id/tips"
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="输入今日的学习内容!"
android:textSize="20sp"
android:textColor="@color/white"
android:gravity="center"
/>
<EditText
android:id="@+id/et_goal"
android:hint="空"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@drawable/my_edit"
android:maxLength="150"
android:textColor="@color/white"
/>
<Button
android:id="@+id/bt_submit"
android:layout_marginTop="50dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/my_button"
android:text="提交"
android:textColor="@color/white"
android:textSize="20sp"
/>
<TextView
android:layout_marginTop="30dp"
android:id="@+id/study_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:gravity="center"
android:text="学习时间:0"
android:textColor="@color/white"
/>
</LinearLayout>
浙公网安备 33010602011771号