Premièrement, je suis désolé de ne pas être bon en anglais, mais j'essaierai d'écrire aussi bien que possible.

Lorsque vous sélectionnez une date dans DatePickerDialog et sélectionnez à nouveau une date,

Le focus sur le sélecteur ne passe pas à la date modifiée lors de la première sélection.

Comment puis-je faire pour ce problème?

AddProjectOrEvent.java

@Override
public void onClick(View view) {
    Log.d("AddProjectOrEvent", "onClick() execute!");

    if (view == TV_ADDpe_EvDate_startDate) {
        showDatePickerDialog(AddProjectOrEvent.this, TV_EV_DATE_START_DATE, dateSetListener, year, month, day);
    }





private void showDatePickerDialog(Context context, int FLAG, DatePickerDialog.OnDateSetListener dateSetListener, int year, int month, int day) {
    Log.d("AddProjectOrEvent", "showDatePickerDialog() execute!");

    Flag_What_DateSet = FLAG;
    new DatePickerDialog(context, dateSetListener, year, month, day).show();
}





DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
        Log.d("AddProjectOrEvent", "dateSetListener_onDateSet() execute!");

        if (Flag_What_DateSet == TV_EV_DATE_START_DATE) {
            setText(TV_EV_DATE_START_DATE, TV_ADDpe_EvDate_startDate, year, month, day);
        } 
    }
};

C'est le code du problème dont je parle.

C'est trop complexe, alors j'ai réduit pour vous montrer.

Picker est déjà implémenté par ce code,

Je ne sais pas quoi mettre en œuvre.

0
Eli. 23 nov. 2017 à 13:15

4 réponses

Meilleure réponse

Essaye ça...

Ce codage définira le sélecteur de date avec la date actuelle pour le premier clic et la date sélectionnée pour le deuxième clic

public class MainActivity extends AppCompatActivity {

    private int year;
    private int month;
    private int day;
    private EditText signup_bday;

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

        signup_bday=(EditText)findViewById(R.id.edittext_signup_birthday);

        signup_bday.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                showDatePickerDialog(signup_bday.getText().toString());
            }
        });
    }

    private void showDatePickerDialog(String date) {
        if (date.contentEquals("")) {
            Calendar mcurrentDate=Calendar.getInstance();
            year=mcurrentDate.get(Calendar.YEAR);
            month=mcurrentDate.get(Calendar.MONTH);
            day=mcurrentDate.get(Calendar.DAY_OF_MONTH);
        }else{
            String[] split = date.split("-");
            day = Integer.valueOf(split[0]);
            int montx = Integer.valueOf(split[1]);
            month = montx -1;
            year = Integer.valueOf(split[2]);
        }

        DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int curyear, int monthOfYear,
                                  int dayOfMonth) {
                // TODO Auto-generated method stub
                signup_bday.setText(new StringBuilder().append(dayOfMonth).append("-").append(monthOfYear + 1).append("-").append(curyear));
            }
        };

        DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                dateSetListener, year, month, day);
        datePickerDialog.show();
    }
}
1
Arnold Brown 23 nov. 2017 à 11:29

Veuillez vérifier votre code ci-dessous, cela fonctionnera.

La classe publique DateDialogFragment étend DialogFragment implémente DatePickerDialog.OnDateSetListener {

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);
    DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
    dialog.getDatePicker().setMinDate(System.currentTimeMillis());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    return  dialog;
}

@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
    Calendar c = Calendar.getInstance();
    c.set(year, month, dayOfMonth);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
    String formattedDate = sdf.format(c.getTime());

}

}

0
Harry.Android.Dev 23 nov. 2017 à 11:20

Je ne comprends pas vraiment votre code, mais d'après ce que vous avez écrit, il semble que vous essayez d'ajouter un sélecteur de date à votre projet. Ici, je vais fournir un DatePicker que vous allez appeler dans votre activité.

Créez un fragment nommé DatePickerFrag et collez le code suivant dans le framgent:

public class DatePickerFrag extends DialogFragment implements DatePickerDialog.OnDateSetListener{

    AdapterViews.OnDateListener mCallback;
    OnDateChangeListener mCall;

    public interface OnDateListener{
        void onDate(int month, int year, int date);
    }

    @Override
    public void onAttach(Context context){
        super.onAttach(context);
        mCallback = (OnDateListener)context;
    }


    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedState){
        Calendar mCalendar = Calendar.getInstance();
        int month = mCalendar.get(Calendar.MONTH);
        int year = mCalendar.get(Calendar.YEAR);
        int day = mCalendar.get(Calendar.DAY_OF_MONTH);

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

    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
        mCallback.onDate(month, year, day);
    }
}

Ensuite, affichez le sélecteur de date lorsqu'un bouton est cliqué comme ceci:

@Override
public void onClick(View view) {
    Log.d("AddProjectOrEvent", "onClick() execute!");

    if (view == TV_ADDpe_EvDate_startDate) {
            DatePickerFrag dialog = new DatePickerFrag();
            dialog.show(getSupportFragmentManager(), "datepicker");
    }

Obtenez maintenant les valeurs de date en implémentant l'interface de DatePickerFrag dans votre activité.

Par exemple:

public class MyActivity extends Activity implements OnDateChangeListener{

    @Override
    public void onDate(int month, int year, int day) {
        //Get the set month, year and day here in Integers

    }...}

C'est tout.

0
Pang 24 nov. 2017 à 01:11

Tout d'abord, vous devez avoir une déclaration globale pour le calendrier.

Calendar calendar;

Deuxièmement, instanciez-le dans onCreate () of Activity.

calendar = Calendar.getInstance();

Maintenant, pour onClick sur EditText, vous pouvez avoir un code comme celui-ci.

et_calendar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int YEAR = calendar.get(Calendar.YEAR);
                int MONTH=calendar.get(Calendar.MONTH);
                int DAY=calendar.get(Calendar.DAY_OF_WEEK);
                DatePickerDialog datePickerDialog = new DatePickerDialog(DummyDialog.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                         calendar.set(year,month,dayOfMonth);
                         et_calendar.setText(""+dayOfMonth+"-"+(month+1)+"-"+year);
                    }
                },YEAR,MONTH,DAY);
            }
        });

Pour la toute première fois, votre boîte de dialogue s'ouvre avec la date du système. Lorsque vous avez cliqué sur une date, cette date sera attribuée à l'instance de calendrier global. concentré.

0
RaviTejaSiddabattuni 23 nov. 2017 à 14:23
47452965