import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class Fragment_timer extends AppCompatActivity {
Button button_start, button_reset, button_end;
EditText time_min, time_sec;
InputMethodManager imm;
Handler handler = new Handler(){
public void handleMessage(Message message) {
String time = getTimeOut();
if(time.equals("00:00")){
reset();
}
else {
handler.sendEmptyMessage(0);
}
}
};
final static int INIT = 0;
final static int RUN = 1;
final static int PAUSE = 2;
int cur_status = INIT;
long baseTime;
long pauseTime;
long setTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_timer);
imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
time_min = findViewById(R.id.time_min);
time_min.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(time_min.hasFocus() && getEditTime() != 0){
setTime();
Log.d("ProgressTest","setTime = " + setTime);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
time_sec = findViewById(R.id.time_sec);
time_sec.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(time_sec.hasFocus() && getEditTime() != 0){
setTime();
Log.d("ProgressTest","setTime = " + setTime);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
button_start.findViewById(R.id.button_start);
button_reset.findViewById(R.id.button_reset);
button_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(getEditTime() != 0){
//키보드 숨기기
hideKeyboard();
start(cur_status);
}
else
{
Toast.makeText(Fragment_timer.this, "시간을 입력하시오. 25분 추천.", Toast.LENGTH_SHORT).show();
time_min.requestFocus();
}
}
});
button_reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
reset();
}
});
}
public void reset(){
handler.removeCallbacksAndMessages(null);
cur_status = INIT;
setTime = 0;
time_min.setText("00");
time_min.setEnabled(true);
time_sec.setText("00");
time_sec.setEnabled(true);
button_start.setText("시작");
button_reset.setEnabled(false);
}
public void hideKeyboard(){
imm.hideSoftInputFromWindow(time_min.getWindowToken(),0);
imm.hideSoftInputFromWindow(time_sec.getWindowToken(),0);
}
public long getEditTime(){
long min = Long.parseLong(time_min.getText().toString())* 60 * 1000;
long sec = Long.parseLong(time_sec.getText().toString())* 1000;
return min+sec;
}
public void start(int status){
switch (status) {
case INIT:
baseTime = SystemClock.elapsedRealtime();
button_start.setText("멈춤");
button_reset.setEnabled(false); //버튼비활성
//edittext 비활
time_min.setEnabled(false);
time_sec.setEnabled(false);
handler.sendEmptyMessage(0);
cur_status = RUN;
break;
case RUN:
handler.removeMessages(0);
pauseTime = SystemClock.elapsedRealtime();
button_start.setText("재시작");
button_reset.setEnabled(true);
cur_status = PAUSE;
break;
case PAUSE:
long now = SystemClock.elapsedRealtime();
baseTime += (now-pauseTime);
button_start.setText("멈춤");
button_reset.setEnabled(false);
handler.sendEmptyMessage(0);
cur_status = RUN;
break;
}
}
public String getTimeOut(){
long now = SystemClock.elapsedRealtime();
long outTime = baseTime-now+setTime;
long sec = outTime/1000%60;
long min = outTime/1000/60;
if(outTime%1000/10 != 0 && sec < 60) {
sec += 1;
if(sec ==60) {
sec = 0;
min += 1;
}
}
String easy_outTime = String.format("%02d:02d",min,sec);
String[] times = easy_outTime.split(":");
time_min.setText(times[0]);
time_sec.setText(times[1]);
return easy_outTime;
}
public void setTime() {
setTime = Long.parseLong(time_min.getText().toString()) * 1000 * 60
+ Long.parseLong(time_sec.getText().toString()) * 1000;
}
}
프래그먼트 화면에 타이머 구현을 위해 버튼과 edittext를 넣었습니다.
실행은 잘 되는데 버튼을 눌러도 반응이 없습니다.
xml파일의 아이디, 자바와 xml 파일 이름, 파일 지정은 잘 됐습니다.
https://everyshare.tistory.com/32 소스는 이 곳을 참고했고,
여기서 프로그래스바 코드를 제외하고 코딩했습니다.
이유를 모르겠습니다 ㅠㅠ