Пользовательский диалог Android Inside: - Как открыть DatePickerDialog? - PullRequest
0 голосов
/ 22 января 2019

Пожалуйста, кто-нибудь может помочь мне относительно того, как я могу открыть диалог выбора даты, если я хочу открыть его из пользовательского диалога, у меня есть собственный класс диалога, как показано ниже

public class ReceiptsDialog extends CustomActivity {
    private static ReceiptsDialog instance;
    private static Activity mContext;
    private static Dialog customDialog;
    static EditText tv_date;

    public static ReceiptsDialog getInstance() {
        if (instance == null) {
            instance = new ReceiptsDialog();
        }
        return instance;
    }

    public void createDialog(Activity mContext,Dialogclick dialogclick) {
        this.mContext = mContext;
        this.dialogclick = dialogclick;
        customDialog = new Dialog(mContext);
        customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        customDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        customDialog.setContentView(R.layout.receipts_dialog);
        customDialog.setCanceledOnTouchOutside(false);
        customDialog.show();
        init();
    }

    private void init() {
        tv_date = customDialog.findViewById(R.id.et_date);
        setTouchNClick(tv_date);
    }

    @Override
    public void onClick(View v) {
        super.onClick(v);

        if (v == tv_date) {
            DialogFragment dFragment = new DatePickerFragment();
            dFragment.show(getSupportFragmentManager(), "Date Picker");
        }
    }

    @SuppressLint("ValidFragment")
    public static class DatePickerFragment extends 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(), R.style.MyCalTheme, this, year, month, day);
            return dpd;
        }

        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            final SimpleDateFormat dateViewFormatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.US);//hh:mm:ss
            Calendar choosen = Calendar.getInstance();
            choosen.set(year, month, dayOfMonth);
            tv_date.setText(dateViewFormatter.format(choosen.getTime()));
        }
    }
}

я хочу открыть средство выбора датыДиалог по клику tv_date

, но это приводит к ошибке:

W / System.err: java.lang.IllegalStateException: активность была уничтожена на android.support.v4.app.FragmentManagerImpl.enqueueAction (FragmentManager.java:2114) в android.support.v4.app.BackStackRecord.commitInternal (BackStackRecord.java:683) в android.support.v4.app.BackStackRecord.

commit (BackStackRecord.j:637) на android.support.v4.app.DialogFragment.show (DialogFragment.java:144) на com.omegasoftware.olivepos.home.functions.ReceiptsDialog.onClick (ReceiptsDialog.java:141) на android.view.View.performClick(View.java:5205) в android.view.View $ PerformClick.run (View.java:21164) в android.os.Handler.handleCallback (Handler.java:739) в android.os.Handler.dispatchMessage (Обработчик.Java: 95) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) на java.lang.reflect.Method.invoke (собственный метод) на ком.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726)

1 Ответ

0 голосов
/ 23 января 2019

Рабочий раствор Обычный диалог Открытие Выбор даты : Использование ниже пример

public class ReceiptsDialog extends CustomActivity {
    private Activity mContext;
    private Dialog customDialog;
    EditText tv_date;

    public void createDialog(Activity mContext) {
        this.mContext = mContext;
        customDialog = new Dialog(mContext);
        customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        customDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        customDialog.setContentView(R.layout.receipts_dialog);
        customDialog.setCanceledOnTouchOutside(false);
        customDialog.show();

        init();
    }

    private void init() {
        tv_date = customDialog.findViewById(R.id.et_date);
        setTouchNClick(tv_date);
    }

    @Override
    public void onClick(View v) {
        super.onClick(v);
        if (v == tv_date) {
            View vv = v;
            Calendar c = Calendar.getInstance();
            DatePickerDialog dpd = new DatePickerDialog(mContext,
                new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year,
                                          int monthOfYear, int dayOfMonth) {
                            String s = dayOfMonth + "-"
                                + (monthOfYear + 1) + "-" + year;
                            tv_date.setText(dayOfMonth + "-"
                                + (monthOfYear + 1) + "-" + year);
                        }
                    }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
            dpd.show();
        }
    }
}
...