जहां तक मेरा जानकारी है, पहले जेली बीन्स के संस्करणों था निर्धारित करें और रद्द बटन जब TimePickerDialog का उपयोग कर। जेली बीन्स में केवल हो गया बटन।एंड्रॉइड जेलीबीन टाइमपिकरडियलॉग में रद्द करने का कोई तरीका है?
मैं बस छोड़ सकता बटन हो गया है, और संवाद के बाहर क्लिक करके संवाद को बंद कर सकता है, लेकिन अगर दबाने हो गया या संवाद के बाहर मेरी onTimeSetListener
कहा जाता हो जाता है।
तो मुझे this stackoverflow question मिला जो वर्णन करता है कि डेटपिकरडियलॉग का उपयोग करते समय एक बग है। डेटपिकरडियलॉग का उपयोग करके समस्या को ठीक करने के लिए, मुझे प्रारंभ करने पर onDateSetListener
null
पर सेट करना था, और BUTTON_POSITIVE
(सेट) और BUTTON_NEGATIVE
(रद्द करें) पर क्लिक करने के लिए अपने स्वयं के बटन लागू करें। कौन सा है, ठीक है, क्योंकि जब बटन सेट कहा जाता है मैं की तरह DatePicker मूल्यों का उपयोग कर सकते इस
int yearPicked = dateDlg.getDatePicker().getYear();
int monthPicked = dateDlg.getDatePicker().getMonth();
int dayPicked = dateDlg.getDatePicker().getDayOfMonth();
तो onDateSetListener
उपयोग करने के लिए कोई जरूरत नहीं है, लेकिन अगर मैं होता, इसे फिर से जब दबाने ही कहा जाता है सेट या रद्द करें।
मैं TimePickerDialog उसी तरह उपयोग करने के लिए कोशिश की, लेकिन समस्या यह है कि BUTTON_POSITIVE
onClick विधि के अंदर, मैं घंटे और मिनट मूल्यों से पहले के रूप में, timepicker रूप DatePickerDialog उपयोग नहीं कर सकते क्योंकि TimePickerDialogप्रदान नहीं करता है, हैडेटपिकर प्रदान करता है। और फिर यदि मैं onTimeSetListener
का उपयोग करता, तो इसे कुछ दबाकर बुलाया जाएगा।
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
final TimePickerDialog timeDlg = new TimePickerDialog(PreferencesActivity.this, null, hour, min, true);
// Make the Set button
timeDlg.setButton(DialogInterface.BUTTON_POSITIVE, "Set", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
// CANNOT ACCES THE VALUES
Toast.makeText(PreferencesActivity.this, "Set", Toast.LENGTH_SHORT).show();
}
}
});
// Set the Cancel button
timeDlg.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
Toast.makeText(PreferencesActivity.this, "Cancel", Toast.LENGTH_SHORT).show();
}
}
});
timeDlg.show();
ठीक है, फिर भी आप दर्ज किए गए मानों को कैप्चर करने के लिए 'टाइमपिकरडियलॉग.ऑनटाइमसेट लिस्टनर' पंजीकृत कर सकते हैं, लेकिन यदि नकारात्मक बटन टैप किया गया है तो बस उनके साथ कुछ भी न करें, है ना? –
यह समस्या है, ऑनटाइमसेट लिस्टनर को तब कहा जाता है जब सकारात्मक, नकारात्मक और बैक बटन दबाया जाता है। – Marko
मुझे एक ही समस्या थी, ध्यान दें कि नीचे स्वीकृत उत्तर पिछड़ा संगत (पूर्व जेबी) नहीं है। Sice मुझे एसडीके 8+ की आवश्यकता थी, मैंने इसे एक विस्तारित खंड संवाद के अंदर एक बूलियन के साथ हल किया, और वहां पर क्लिक किया (क्लिक करें)। – auval