There is some way to store a date entered (when you start the app) and that with that date stored, every time you start the app it is not necessary to return it to enter. When entering that date, through Calendar, it performs operations (adds and removes days) in addition to daily counts of days left to arrive at the date entered. I tried it with SharedPreferences but it does not save anything for me.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.en_salud.vencimiento.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Ingrese Fecha de Vencimiento"
android:id="@+id/txtIngrese"
android:visibility="visible"
android:layout_marginTop="180dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/btnSelecFecha"
android:visibility="visible"
android:hint="seleccione la fecha"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="80dp"
android:background="#afafaf"
android:textColorHint="#fc0105"
android:textStyle="italic" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/txtDiasFaltan"
android:text=""
android:layout_alignParentStart="true"
android:textSize="40dp"
android:textStyle="bold"
android:layout_marginTop="20sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/txtFechaVencimiento"
android:visibility="invisible"
android:layout_below="@+id/txtDiasFaltan"
android:layout_alignParentStart="true"
android:layout_marginTop="25dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/txtFecha7menos"
android:visibility="invisible"
android:layout_below="@+id/txtFechaVencimiento"
android:layout_alignParentStart="true"
android:layout_marginTop="25dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/txtFecha30mas"
android:visibility="invisible"
android:layout_below="@+id/txtFecha7menos"
android:layout_alignParentStart="true"
android:layout_marginTop="25dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:layout_gravity="center"
android:text="GUARDAR"
android:visibility="invisible"
android:id="@+id/btnGuardar"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/btn3"
android:id="@id/btnReiniciar"
android:visibility="invisible"
android:layout_marginTop="50dp"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
TextView txtDiasFaltan,txtIngrese,txtFechaVencimiento,txtFecha7menos,
txtFecha30mas,btnSelecFecha,btnReiniciar;
Button btnGuardar;
SharedPreferences sf;
public static final String preference = "pref";
public static final String saveIt = "saveKey";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtDiasFaltan = (TextView) findViewById(R.id.txtDiasFaltan);
txtIngrese = (TextView) findViewById(R.id.txtIngrese);
txtFechaVencimiento = (TextView) findViewById(R.id.txtFechaVencimiento);
txtFecha7menos = (TextView) findViewById(R.id.txtFecha7menos);
txtFecha30mas = (TextView) findViewById(R.id.txtFecha30mas);
btnSelecFecha = (TextView) findViewById(R.id.btnSelecFecha);
btnReiniciar = (TextView) findViewById(R.id.btnReiniciar);
btnGuardar = (Button)findViewById(R.id.btnGuardar);
sf = getSharedPreferences(preference, Context.MODE_PRIVATE);
if (sf.contains(saveIt)){
txtDiasFaltan.setText(sf.getString(saveIt,""));
}
btnSelecFecha.setOnClickListener(this);
btnGuardar.setOnClickListener(this);
btnReiniciar.setOnClickListener(this);
txtDiasFaltan.setVisibility(View.GONE);
readSharedPreferences();
}
private void createSharedPreferences() {
SharedPreferences.Editor editor = sf.edit();
String dias = txtDiasFaltan.getText().toString();
editor.putString(saveIt, dias);
editor.commit();
}
private void readSharedPreferences() {
sf =getSharedPreferences(preference, Context.MODE_PRIVATE);
txtDiasFaltan = (TextView)findViewById(R.id.txtDiasFaltan);
if (sf.contains(saveIt)){
txtDiasFaltan.setText(sf.getString(saveIt,""));
}
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btnSelecFecha:
DialogFragment picker = new DatePickerFragment();
picker.show(getFragmentManager(), "datePicker");
break;
case R.id.btnReiniciar:
super.recreate();
break;
case R.id.btnGuardar:
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
alertDialogBuilder.setTitle("GUARDAR FECHA");
alertDialogBuilder
.setMessage("Confirma la fecha")
.setCancelable(false)
.setPositiveButton("Si",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
//btnReiniciar.setVisibility(View.VISIBLE);
btnGuardar.setVisibility(View.GONE);
//onPause();
createSharedPreferences ();
readSharedPreferences ();
}
})
.setNegativeButton("CANCELAR",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}
}
public class DatePickerFragment extends android.app.DialogFragment implements DatePickerDialog.OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dpd = new DatePickerDialog(getActivity(), this, year, month, day);
return dpd;
}
public void onDateSet(DatePicker view, int year, int month, int day){
TextView txtDiasFaltan = (TextView) getActivity().findViewById(R.id.txtDiasFaltan);
TextView txtFechaVencimiento = (TextView) getActivity().findViewById(R.id.txtFechaVencimiento);
TextView txtFecha7menos = (TextView) getActivity().findViewById(R.id.txtFecha7menos);
TextView txtFecha30mas = (TextView) getActivity().findViewById(R.id.txtFecha30mas);
SimpleDateFormat df = new SimpleDateFormat("EE dd/MM/yyyy");
long date1 = System.currentTimeMillis();
Calendar cal = Calendar.getInstance();
cal.set(year, month, day, 0, 0, 0);
long Date2 = cal.getTimeInMillis();
txtFechaVencimiento.setText("Vence el día: " + df.format(cal.getTime()));
cal.add(Calendar.DATE, -7);
txtFecha7menos.setText("7 días previos: " + df.format(cal.getTime()));
cal.set(year, month, day, 0, 0, 0);
cal.add(Calendar.DATE, 30);
txtFecha30mas.setText("30 días despues: " + df.format(cal.getTime()));
long diffInMilis = Date2 - date1;
long diffInDays = diffInMilis / (24 * 60 * 60 * 1000);
//long diffInWeeks = diffInMilis / (7 * 24 * 60 * 60 * 1000);
txtDiasFaltan.setText("faltan "+ diffInDays + " días");
textViewVisible();
}
private void textViewVisible() {
getActivity().findViewById(R.id.txtIngrese).setVisibility(View.GONE);
getActivity().findViewById(R.id.btnSelecFecha).setVisibility(View.GONE);
getActivity().findViewById(R.id.txtDiasFaltan).setVisibility(View.VISIBLE);
getActivity().findViewById(R.id.txtFechaVencimiento).setVisibility(View.VISIBLE);
getActivity().findViewById(R.id.txtFecha7menos).setVisibility(View.VISIBLE);
getActivity().findViewById(R.id.txtFecha30mas).setVisibility(View.VISIBLE);
getActivity().findViewById(R.id.btnGuardar).setVisibility(View.VISIBLE);
getActivity().findViewById(R.id.btnReiniciar).setVisibility(View.VISIBLE);
}
}