Estoy tratando de crear una aplicación que me permita elegir una fecha y una tabla se llena con citas ese día. Tengo problemas para que aparezca el selector de fechas.

He echado un vistazo a este https://developer.android.com/guide / topics / ui / controls / pickers y creó un selector de fecha a partir de este código. Quiero llamar a ese selector de fecha con solo presionar un botón que se encuentra en la clase AddAppointmentActivity.

Aquí está mi clase de citas:

package com.example.dentdevils.ui.HomeLinks;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.DialogFragment;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

import com.example.dentdevils.R;
import com.example.dentdevils.ui.HomeActivity;


import java.util.Calendar;

public class AddAppointmentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_appointment);

        // Date label
        TextView dateLabel = (TextView) findViewById(R.id.txtDateLabel);

        // Date Picker Button Functionality
        Button datePicker = (Button) findViewById(R.id.btnDatePicker);
        datePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        // Back Button Functionality
        Button btnBack = (Button) findViewById(R.id.btnBack);
        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent launchHomepage = new Intent(AddAppointmentActivity.this, HomeActivity.class);
                startActivity(launchHomepage);
            }
        });
    }

}

class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable 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);

        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        // Get date set by user and display appointments in table for the date chosen.

    }

    public void showDatePickerDialog() {
        DialogFragment newFragment = new com.example.dentdevils.ui.HomeLinks.DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker");
    }

}

Tenía las clases en archivos separados, pero estaba probando diferentes cosas, por lo tanto, por qué están en el mismo archivo (las moveré nuevamente para separar los archivos después de que haya logrado llamar al selector de fechas).

Mi pregunta es, ¿cómo llamaría al diálogo del selector de fecha desde la presión del botón?

0
AF_web 24 jun. 2020 a las 13:20

2 respuestas

La mejor respuesta
datePicker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            DialogFragment newFragment = new DatePickerFragment();
            newFragment.show(getSupportFragmentManager(), "datePicker");


        }
    });
0
heyjii 24 jun. 2020 a las 10:30

No es necesario crear un fragmento de diálogo adicional para el selector de fecha. Simplemente cree el objeto DatePickerDialog y llame a show().

Ejemplo:

val calendar = Calendar.getInstance()

val dialog = DatePickerDialog(context,
                    DatePickerDialog.OnDateSetListener { view, year, month, dayOfMonth ->
                        // TODO
                    }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH))

dialog.show()
0
lbasek 24 jun. 2020 a las 10:37