সম্পাদনা পাঠ্য ক্লিক করে টাইমপিকার ডায়ালগ


106

আমি ইতিমধ্যে একটি ডেটপিকার পেয়েছি যা ব্যবহারকারীরা সম্পাদনা পাঠ্য ক্ষেত্রে ক্লিক করলে পপ আপ হয়

eReminderDate.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //To show current date in the datepicker
                Calendar mcurrentDate = Calendar.getInstance();
                int mYear = mcurrentDate.get(Calendar.YEAR);
                int mMonth = mcurrentDate.get(Calendar.MONTH);
                int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog mDatePicker;
                mDatePicker = new DatePickerDialog(AddReminder.this, new OnDateSetListener() {
                    public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
                        // TODO Auto-generated method stub
                    /*      Your code   to get date and time    */
                        selectedmonth = selectedmonth + 1;
                        eReminderDate.setText("" + selectedday + "/" + selectedmonth + "/" + selectedyear);
                    }
                }, mYear, mMonth, mDay);
                mDatePicker.setTitle("Select Date");
                mDatePicker.show();
            }
        });

আমি একইভাবে টাইমপিকার করার চেষ্টা করেছি কিন্তু এটি কাজ করতে অক্ষম। এটি কাজ করার এটাই আমার চেষ্টা

 eReminderTime.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Calendar mcurrentTime = Calendar.getInstance();
                int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
                int minute = mcurrentTime.get(Calendar.MINUTE);
                TimePickerDialog mTimePicker;
                mTimePicker = new TimePickerDialog(AddReminder.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                        eReminderTime.setText( ""selectedHour + ":" + selectedMinute);
                    }
                }, hour, minute);
                mTimePicker.setTitle("Select Time");
                mTimePicker.show();

            }
        });

ডেটপিকারের জন্য আমি যেভাবে কাজটি করেছিলাম তার মতো এটি করা কি অসম্ভব?

এই কোডটি দিয়ে সম্পাদনা পাঠ্য ক্ষেত্রটি ক্লিক করা মাত্র আমি একটি টাইমপিকার পপ আপ করার চেষ্টা করেছি।

      eReminderTime.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            showDialog(TIME_DIALOG_ID);
        }
    });

কোনও কারণে যখন আমি অ্যান্ড্রয়েড স্টুডিওতে প্রবেশ করি তখন 'শো ডায়ালগ' আউট হয়ে যায়।

আমি কোথায় ভুল করছি সে সম্পর্কে কেউ আমাকে টিপস দিতে পারেন? বা আমি কি কাস্টম ডায়ালগফ্রেগমেন্টটি ব্যবহার করতে যাচ্ছি?


আপনার দ্বিতীয় কোড ব্লকে আসলে কী কাজ করে না ?, এটি কি কেবল প্রদর্শিত হয় না, এটি সংকলন করে না?
রোবডব

"" এবং নির্বাচিত আওয়ারের মধ্যে সেটটেক্সট অংশে একটি ত্রুটি দেখায়, একটি ',' বা একটি ') বলে প্রয়োজন' তবে আমি একটি 'রাখি, তখন এটি বলে যে "পদ্ধতিটি সমাধান করতে পারে না' সেটটেক্সট (জাভা.লং। স্ট্রিং, জাভা) .lang.String) "
মার্ক ও'সুলিভান

উত্তর:


234
eReminderTime.setText( "" + selectedHour + ":" + selectedMinute);

আপনার একটি এবং নির্বাচিত সময়ের +মধ্যে অনুপস্থিত "", setTextপদ্ধতিগুলি কেবল একটি একক স্ট্রিং গ্রহণ করে, তাই আপনাকে সমস্ত অংশকে একত্রিত করতে হবে (প্রথম উদ্ধৃতি সম্ভবত অপ্রয়োজনীয়)।

eReminderTime.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Calendar mcurrentTime = Calendar.getInstance();
            int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
            int minute = mcurrentTime.get(Calendar.MINUTE);
            TimePickerDialog mTimePicker;
            mTimePicker = new TimePickerDialog(AddReminder.this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                    eReminderTime.setText( selectedHour + ":" + selectedMinute);
                }
            }, hour, minute, true);//Yes 24 hour time
            mTimePicker.setTitle("Select Time");
            mTimePicker.show();

        }
    });

এটিতে আপনার দ্বিতীয় ত্রুটিটি ঠিক করা উচিত, আপনি শেষ প্যারামিটারটি সরবরাহ করছিলেন না। টাইমপিকারডায়ালগ কনস্ট্রাক্টর


এটি চেষ্টা করে দেখে মনে করি আমি সম্ভবত এটি চেষ্টা করেছি কারণ আমি এই বার্তাটি আগে পেয়েছিলাম। 'নতুন টাইমপিকারডায়ালগ' এর পরে এবং 'এমটাইমপিকার.সেটিটাইটেল' এর আগে এখন সমস্ত কিছু ত্রুটি দেখাচ্ছে showing ত্রুটিটি হল 'কনস্ট্রাক্টরকে সমাধান করতে পারছি না' টাইমপিকারডায়ালগ (com.appname.classname, android.app.TimePickerDialog.OnTimeSetListener, int, int) ''
মার্ক ও'সুলিভান

2
যদি আপনি অ্যান্ড্রয়েড ডকুমেন্টেশন পরীক্ষা করেন তবে আপনাকে ডায়ালগটি 24 ঘন্টা কিনা তা উল্লেখ করে একটি চূড়ান্ত বুলিয়ান প্যারামিটার যুক্ত করতে হবে। টাইমপিকার ডায়ালগ (প্রসঙ্গে প্রসঙ্গ, টাইমপিকার ডায়ালগ.অনটাইমসেটস্লাইজনার কলব্যাক, ইনট আওয়ারঅফডে, ইনট মিনিট, বুলিয়ান is24 ঘন্টা ভিউ)
রোবডব

সত্য / মিথ্যা বুলেটিয়ান সম্পর্কে সম্পূর্ণরূপে ভুলে গিয়েছিলাম, এটি আগে দেখেছি কিন্তু যখন আমি আমার কোডটি তারিখ চয়নকারের মতো কিছুতে পরিবর্তন করেছি তখন এটি অন্তর্ভুক্ত করতে ভুলে গিয়েছিলাম। আপনার সাহায্যের জন্য ধন্যবাদ!
মার্ক ও'সুলিভান

3
অান্তরিক ধন্যবাদ. আপনি সম্ভবত মিনিটগুলিও ফর্ম্যাট করতে চান: eReminderTime.setText (নির্বাচিতআর + ":" স্ট্রিং.ফর্ম্যাট ("% 02 ডি", নির্বাচিতমিনিট));
স্টিফেন পল

আমি আশা করি এটি আরও কার্যকর এবং পুনঃব্যবহারযোগ্য -> টাইমপিকার ইউনিভার্সাল
প্রতীক

27

পুনঃব্যবহারযোগ্য উপায়ে কেন লিখবেন না?

সেটটাইম ক্লাস তৈরি করুন:

class SetTime implements OnFocusChangeListener, OnTimeSetListener {   

       private EditText editText;
       private Calendar myCalendar;

       public SetTime(EditText editText, Context ctx){
           this.editText = editText;
           this.editText.setOnFocusChangeListener(this);
           this.myCalendar = Calendar.getInstance();

       }

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            if(hasFocus){
                int hour = myCalendar.get(Calendar.HOUR_OF_DAY);
                int minute = myCalendar.get(Calendar.MINUTE);
                new TimePickerDialog(ctx, this, hour, minute, true).show();
            }
        }

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            // TODO Auto-generated method stub
            this.editText.setText( hourOfDay + ":" + minute);
        }

    }

তারপরে এটি অনক্রিট ফাংশন থেকে কল করুন:

    EditText editTextFromTime = (EditText) findViewById(R.id.editTextFromTime);
    SetTime fromTime = new SetTime(editTextFromTime, this);

এএম / প্রধানমন্ত্রী কীভাবে পাবেন?
প্রতীক বুটানি

10

আপনি সম্পাদনা পাঠের অনক্লিক শ্রোতার নীচে কোডটি ব্যবহার করতে পারেন

  TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this,
    new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay,
                              int minute) {

            tv_time.setText(hourOfDay + ":" + minute);
        }
    }, hour, minute, false);
     timePickerDialog.show();

আপনি অ্যান্ড্রয়েড টাইমপিকারের উদাহরণে পুরো কোডটি দেখতে পারেন


3

আমি একাধিকবার সময় পরিবর্তন করার সময় ফোকাস পরিবর্তন এবং শ্রোতাদের উভয়কে সমর্থন করতে @ সুমোয়ানন্দের চমৎকার পুনঃব্যবহারযোগ্য সমাধানটি প্রসারিত করেছি। শেষ নির্বাচিত সময় + এইচএইচ: মিমি ফর্ম্যাটিং মনে রাখতে পিকার ক্যালেন্ডার আপডেট করা

public class TimeSetter implements View.OnFocusChangeListener, TimePickerDialog.OnTimeSetListener, View.OnClickListener {

    private EditText mEditText;
    private Calendar mCalendar;
    private SimpleDateFormat mFormat;

    public TimeSetter(EditText editText){
       this.mEditText = editText;
       mEditText.setOnFocusChangeListener(this);
       mEditText.setOnClickListener(this);
    }

    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (hasFocus){
            showPicker(view);
        }
    }

    @Override
    public void onClick(View view) {
        showPicker(view);
    }

    private void showPicker(View view) {
        if (mCalendar == null)
            mCalendar = Calendar.getInstance();

        int hour = mCalendar.get(Calendar.HOUR_OF_DAY);
        int minute = mCalendar.get(Calendar.MINUTE);

        new TimePickerDialog(view.getContext(), this, hour, minute, true).show();
    }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
        mCalendar.set(Calendar.MINUTE, minute);

        if (mFormat == null)
            mFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());

        this.mEditText.setText(mFormat.format(mCalendar.getTime()));
    }

}

অনক্রিট থেকে ব্যবহার:

EditText timeEditText = (EditText) rootView.findViewById(R.id.timeText);
new TimeSetter(timeEditText);

আপনার সমাধানের জন্য আপনাকে ধন্যবাদ :) আমি এএম / প্রধানমন্ত্রী ব্যবহারের জন্য এটি সম্পাদনা করেছি। এখানে চেক করুন: এএম / প্রধানমন্ত্রী ছাড়া / সময়বিহীন টাইমপিকার
প্রতীক

2

আমি জানি না এটি আপনার পক্ষে কাজ করবে কিনা, এটি আমার পক্ষে ঠিক কাজ করে।

তারিখ / সময় চয়নকারী কথোপকথনের জন্য একটি পদ্ধতি তৈরি করুন।

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is called, below method will be called.
    // The arguments will be working to get the Day of Week to show it in a special TextView for it.

    public void onDateSet(DatePicker view, int selectedYear,
                          int selectedMonth, int selectedDay) {
        String year1 = String.valueOf(selectedYear);
        String month1 = String.valueOf(selectedMonth + 1);
        String day1 = String.valueOf(selectedDay);
        delivDate.setText(month1 + "/" + day1 + "/" + year1);
        delivDay.setText(DateFormat.format("EEEE", new Date(selectedYear, selectedMonth, selectedDay - 1)).toString());
    }
};

এবং তারপরে, আপনি যেখানেই চাইবেন ঠিক তেমন এটি করতে পারেন

public void setDateOnClick (View view) {
    Calendar cal = Calendar.getInstance();

    DatePickerDialog datePicker = new DatePickerDialog(this, datePickerListener,
            cal.get(Calendar.YEAR),
            cal.get(Calendar.MONTH),
            cal.get(Calendar.DAY_OF_MONTH));
    //Create a cancel button and set the title of the dialog.
    datePicker.setCancelable(false);
    datePicker.setTitle("Select the date");
    datePicker.show();
}

আশা করি আপনি এটি আপনার সমাধান হিসাবে খুঁজে পেয়েছেন।


আমি দুটি লাইন পছন্দ করি "// একটি বাতিল বোতাম তৈরি করুন [...]" এবং "ডেটপিকার.সেটসন্যাসেবল (মিথ্যা);" হিউ হিউ হিউ
মজিজএমএস

আমি মনে করি এই প্রশ্নটি প্রশ্নের সাথে সম্পর্কিত নয়।
প্রতীক বুটানি

1

আপনি সর্বশেষ যুক্তিটি এর মধ্যে রাখেন নি TimePickerDialog

{
public TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute,
            boolean is24HourView) {
        this(context, 0, listener, hourOfDay, minute, is24HourView);
    }
}

এটি হল কোড TimePickerclass। এটি একটি বুলিয়ান যুক্তি প্রয়োজনis24HourView


0
public void onClick1(View v) {
  DatePickerDialog dialog = new DatePickerDialog(this, this, 2013, 2, 18);
  dialog.show();
}

public void onDateSet1(DatePicker view, int year1, int month1, int day1) {
  e1.setText(day1 + "/" + (month1+1) + "/" + year1);
}

7
দয়া করে কেবল কোড পোস্ট করবেন না; আপনার কোডটি কী করছে এবং এটি ওপির সমস্যার সমাধান করে কেন তা ব্যাখ্যা করুন।
ডিমো 414

0
public class **Your java Class** extends ActionBarActivity implements  View.OnClickListener{
date = (EditText) findViewById(R.id.date);
date.setInputType(InputType.TYPE_NULL);
        date.requestFocus();
        date.setOnClickListener(this);
        dateFormatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);

        setDateTimeField();

private void setDateTimeField() {
        Calendar newCalendar = Calendar.getInstance();
        fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar newDate = Calendar.getInstance();
                newDate.set(year, monthOfYear, dayOfMonth);
                date.setText(dateFormatter.format(newDate.getTime()));
            }

        }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

    }
@Override
    public void onClick(View v) {
        fromDatePickerDialog.show();
    }
}

এই কোড সম্পর্কে উত্তর সম্পর্কে কিছু অতিরিক্ত তথ্য সম্ভবত উপকারী হবে।
পাইভস

0

আমার জন্য ডায়ালগটি একের বেশি প্রদর্শিত হবে যদি আমি টিএমআর ডায়ালগের জন্য dpFlightDate সম্পাদনা পাঠ্যকে একাধিকবার ক্লিক করি। এই ডায়ালগটি একবারে উপস্থিত হতে আমি কীভাবে এড়াতে পারি এবং যদি ব্যবহারকারী ক্লিকের দ্বিতীয়বারের মতো ডায়ালগটি আবার উপস্থিত না হয় অর্থাৎ ডায়ালগটি যদি স্ক্রিনে থাকে?

          // perform click event on edit text
            dpFlightDate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // calender class's instance and get current date , month and year from calender
                    final Calendar c = Calendar.getInstance();
                    int mYear = c.get(Calendar.YEAR); // current year
                    int mMonth = c.get(Calendar.MONTH); // current month
                    int mDay = c.get(Calendar.DAY_OF_MONTH); // current day
                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(frmFlightDetails.this,
                            new DatePickerDialog.OnDateSetListener() {
                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    // set day of month , month and year value in the edit text
                                    dpFlightDate.setText(dayOfMonth + "/"
                                            + (monthOfYear + 1) + "/" + year);

                                }
                            }, mYear, mMonth, mDay);
                    datePickerDialog.show();
                }
            });
            tpFlightTime.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // Use the current time as the default values for the picker
                    final Calendar c = Calendar.getInstance();
                    int hour = c.get(Calendar.HOUR_OF_DAY);
                    int minute = c.get(Calendar.MINUTE);
                    // Create a new instance of TimePickerDialog
                    timePickerDialog = new TimePickerDialog(frmFlightDetails.this, new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                            tpFlightTime.setText( selectedHour + ":" + selectedMinute);
                        }
                    }, hour, minute, true);//Yes 24 hour time
                    timePickerDialog.setTitle("Select Time");
                    timePickerDialog.show();
                }
            });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.