#java #android #xml #user-interface #timer
#java #Android #xml #пользовательский интерфейс #таймер
Вопрос:
Я новичок, создаю приложение с таймером и хочу, чтобы приложение позволяло пользователю редактировать время. как в таймере сборки Android. и я написал код, и он на самом деле не работает, он показывает, что его можно редактировать, но когда я пытаюсь что-то написать, это меняется на секунду и возвращается к тому, что было раньше..
xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/activity_stopwatch"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.adir.stopwatch.StopwatchActivity"
android:background="#000000"
>
<Button
android:id="@ id/reset_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickReset"
android:text="@string/reset"
android:textColor="#FFFFFF"
android:layout_below="@ id/stop_button"
android:layout_alignLeft="@ id/stop_button"
android:layout_alignStart="@ id/stop_button" />
<EditText
android:id="@ id/time_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="17dp"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="92sp"
android:textColor="#FFFFFF"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:inputType="time"
/>
<Button
android:id="@ id/start_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickStart"
android:text="@string/start"
android:textColor="#FFFFFF"
android:layout_below="@ id/time_view"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp" />
<Button
android:id="@ id/stop_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickStop"
android:text="@string/stop"
android:textColor="#FFFFFF"
android:layout_alignLeft="@ id/start_button"
android:layout_alignStart="@ id/start_button"
android:layout_below="@ id/start_button"></Button>
</RelativeLayout>
Java:
public class StopwatchActivity extends Activity {
private int seconds=0;
private boolean running;
private boolean wasRunning;
public String time;
public int hours=seconds/3600;
public int minutes=(seconds%3600)/60;
public int secs=seconds%60;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stopwatch);
if(savedInstanceState!=null){
seconds=savedInstanceState.getInt("seconds");
running=savedInstanceState.getBoolean("running");
wasRunning=savedInstanceState.getBoolean("wasRunning");
}
runTimer();
}
public void onClickStart(View view) {
running = true;
}
protected void onStop(){
super.onStop();
wasRunning=running;
running=false;
}
protected void onStart() {
super.onStart();
if(wasRunning){
running=true;
}
}
public void onClickStop(View view) {
running = false;
}
public void onClickReset(View view) {
running = false;
seconds = 0;
}
private void runTimer() {
final EditText timeView = (EditText) findViewById(R.id.time_view);
time=timeView.getText().toString();
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
time = String.format("%d:d:d",hours, minutes, secs);
timeView.setText(time);
if (running) {
seconds--;
}
handler.postDelayed(this, 1000);
}
});
}
public void onSaveInstanceState(Bundle savedInstanceState){
savedInstanceState.putInt("seconds",seconds);
savedInstanceState.putBoolean("running",running);
savedInstanceState.putBoolean("wasRunning",wasRunning);
}
protected void onPause(){
super.onPause();
wasRunning=running;
running=false;
}
protected void onResume(){
super.onResume();
if(wasRunning){
running=true;
}
}
}
Что мне нужно исправить?
Комментарии:
1. Вы хотите, чтобы таймер был таймером обратного отсчета?
2. @espa_network да. таким образом, пользователь напишет примерно 45 секунд, и начнется обратный отсчет
3. Вы должны использовать
CountDownTimer
вместоTimer
Проверки моего ответа
Ответ №1:
Приведенный ниже код даст вам хорошее представление о том, что делать. Когда вы нажмете на кнопку, она получит текст EditText и поместит его в строку. Затем он преобразуется в int. Затем вы можете поместить новую переменную int time
в 1-й параметр вашей CountDownTimer
функции, чтобы установить продолжительность таймера.
Button submit;
TextView timerText;
EditText editTextTime;
CountdownTimer yourTimer;
String timeString;
int time;
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timeString = String.valueOf(editTextTime.getText());
time = Integer.valueOf(timeString);
}
});
yourTimer = new CountDownTimer(time, 1000) {
@Override
public void onTick(long millisUntilFinished) {
int seconds = (int) millisUntilFinished / 1000;
int minutes = seconds / 60;
seconds %= 60;
minutes %= 60;
if (seconds < 10 amp;amp; seconds >= 1) {
timerText.setText("" seconds);
}
}
@Override
public void onFinish() {
}
}.start();
Комментарии:
1. Вы добавили еще одну кнопку для редактирования? неужели невозможно просто нажать на таймер, и он позволит мне редактировать?