正在寻求有关两个问题的建议:
注释:
这是一个快速时间计算器。用户将输入开始时间,然后数小时后将输入停止时间。 Text Watcher将“开始时间”存储在“共享首选项”中。 重启应用程序时,共享首选项以id / StrtFst显示开始时间。 理想情况下,单击id / btStop时,我想在id / DrtnFst中显示“快速持续时间”。删除id / butDuration。但是,id / btStop被编码为以id / StpFst显示停止时间,我怀疑它也可以编码为以id / DrtnFst显示持续时间。我尝试过,打破了我的应用程序。 你怎么看? 谢谢
activityMain.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<Button
android:id="@+id/btStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="80dp"
android:layout_marginTop="98dp"
android:onClick="StartFastBN"
android:text="Start"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="80dp"
android:layout_marginTop="32dp"
android:onClick="StopFastBN"
android:text="Stop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btStart" />
<TextView
android:id="@+id/DrtnFst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:text="Fast duration"
android:textSize="18sp"
app:layout_constraintBaseline_toBaselineOf="@+id/butDuration"
app:layout_constraintStart_toEndOf="@+id/butDuration" />
<TextView
android:id="@+id/StpFst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:text="Stop fast time"
android:textSize="14sp"
app:layout_constraintBaseline_toBaselineOf="@+id/btStop"
app:layout_constraintStart_toEndOf="@+id/btStop" />
<EditText
android:id="@+id/StrtFst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:text="Start fast time"
android:textSize="14sp"
app:layout_constraintBaseline_toBaselineOf="@+id/btStart"
app:layout_constraintStart_toEndOf="@+id/btStart" />
<Button
android:id="@+id/butDuration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="80dp"
android:layout_marginTop="32dp"
android:onClick="DurationFastBN"
android:text="Duration"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btStop" />
</androidx.constraintlayout.widget.ConstraintLayout>
主要活动
package com.example.myapplicationfasting;
/*
todo
get shared preferences to work with TextViews
get DurationFast (line 99) to display in FastDuration TextVeiw
String?
*/
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity implements TextWatcher {
private TextView FstDrtn, FstStp;
private EditText FstStrt;
private Button startBn, stopBn, durationBn;
SharedPreferences sharedPreferences;//SP
SharedPreferences.Editor editor;//SP
private static final String PREF_NAME = "prefs";//SP
private static final String KEY_START = "start";//SP
// private static final String KEY_STOP = "stop";//SP
// private static final String KEY_DURATION = "duration";//SP
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedPreferences = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);//SP
editor = sharedPreferences.edit();//SP
startBn = findViewById(R.id.btStart);
stopBn = findViewById(R.id.btStop);
durationBn = findViewById(R.id.butDuration);
FstDrtn = findViewById(R.id.DrtnFst);//TextView
FstStrt = findViewById(R.id.StrtFst);//TextView
FstStp = findViewById(R.id.StpFst);//TextView
FstStrt.setText(sharedPreferences.getString(KEY_START, ""));//SP
// FstStp.setText(sharedPreferences.getString(KEY_STOP, ""));//SP
FstStrt.addTextChangedListener(this);//SP
// FstStp.addTextChangedListener(this);//SP
}
public SimpleDateFormat StartFastBN(View view) {
SimpleDateFormat startfast = new SimpleDateFormat("HH:mm");
String startDate = startfast.format(new Date());
FstStrt.setText(startDate);//TextView
return startfast;
}
public SimpleDateFormat StopFastBN(View view) {
SimpleDateFormat stopfast = new SimpleDateFormat("HH:mm");
String stopDate = stopfast.format(new Date());
FstStp.setText(stopDate);//TextView
return stopfast;
}
// public SimpleDateFormat DurationFastBN(View view) {
// SimpleDateFormat durationfast = new SimpleDateFormat("HH:mm");
// String durationTime = durationfast.format(??);//What goes here
// FstDrtn.setText(durationTime);
// return durationfast;
// }
//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) {
editor.putString(KEY_START, FstStrt.getText().toString().trim());//SP
// editor.putString(KEY_STOP, FstStp.getText().toString().trim());//SP
editor.apply();//
}
@Override
public void afterTextChanged(Editable s) {
}
// Using API 25, so Duration will not wot. Tried, broke my app. Lifted this code from 2014 post, so it should work.
// public SimpleDateFormat DurationFast(View view){
// String Time1 = "10/02/14 09:29:50";
// String Time2 = "11/04/14 09:12:43";
// SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss");
//
// Date d1 = null;
// Date d2 = null;
// try {
// d1 = format.parse(Time1);
// d2 = format.parse(Time2);
// } catch (ParseException e) {
// e.printStackTrace();
// }
//
// long diff = d2.getTime() - d1.getTime();
// long diffSeconds = diff / 1000;
// long diffMinutes = diff / (60 * 1000);
// long diffHours = diff / (60 * 60 * 1000);
// System.out.println("Time in seconds: " + diffSeconds + " seconds.");
// System.out.println("Time in minutes: " + diffMinutes + " minutes.");
// System.out.println("Time in hours: " + diffHours + " hours.");
//
// return format;
// }
}