如何在TextView中使用共享首选项?如何在TextView中查看结果?

时间:2019-12-26 14:57:09

标签: textview sharedpreferences date-difference

正在寻求有关两个问题的建议:

  1. 如何获取共享首选项以与文本视图一起使用。诉诸 编辑文本(id / StrtFst)。或者,可以在以下位置禁用文本输入吗? 编辑文字?
  2. 如何快速获得持续时间(请参见主要活动结束)以     显示在文本视图(id / DrtnFst)中。

注释:

这是一个快速时间计算器。用户将输入开始时间,然后数小时后将输入停止时间。 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;
//    }

}

0 个答案:

没有答案