मेरी समस्या का सामना करने के लिए कोड उदाहरण यहां दिया गया है।
Container master, content;
Button lockButton;
void layout () {
master = new Container (new LayeredLayout ());
content = new Container (BoxLayout.y());
content.setScrollableY (true);
lockButton = new Button ("");
lockButton.setUIID ("ButtonInvisible");
lockButton.addActionListener ((e)->{
unlock ();
});
master.add(content);
}
void lock () {
master.add(lockButton);
}
void unlock () {
lockButton.remove ();
}
बटन अदृश्य चयनित, अचयनित और दबाया गया शैलियां समान हैं।
समस्या विवरण:
content
नीचे स्क्रॉल करें- आह्वान
lock()
content
पर क्लिक करें (lockButton
इंटरसेप्ट क्लिक करें)- जबकि पॉइंटर को दबाया जाता है
content
की स्क्रॉलिंग 0 है, रिलीज होने पर यह पिछली राशि पर वापस आ जाती है।
मुझे लगता है कि ऐसा इसलिए होता है क्योंकि बटन क्लिक पर अपनी शैली बदल देता है, जो अंतर्निहित सामग्री की बग को पुन: रंगने/पुन: सत्यापित करने का कारण बनता है।
डायमंड के उत्तर के अनुसार अपडेट करें
अतिरिक्त जानकारी:
कंटेनर master
, SwipeableContainer
का मध्य भाग है।
जब भी SwipeableContainer
को खोला जाता है तो विधि lock()
का उपयोग किया जाता है।
अगर मैं revalidate()
का आह्वान करता हूं जब SwipeableContainer
खुला होता है - स्क्रीन अजीब तरह से झिलमिलाहट करती है, लेकिन व्यवहार नहीं बदला जाता है - जब भी बटन दबाया जाता है तब भी स्क्रॉलिंग शून्य हो जाती है।
शायद यह महत्वपूर्ण है - कंटेनर में Tabs
घटक है content
कोड के इस संस्करण में पुनर्वैधीकरण ऐसी समस्या का कारण नहीं हो सकता है, क्योंकि कोई घटक जोड़ा या हटाया नहीं जाता है, लेकिन समस्या अभी भी वही है।
Container master, content;
Button lockButton;
void layout () {
master = new Container (new LayeredLayout ());
content = new Container (BoxLayout.y());
content.setScrollableY (true);
lockButton = new Button ("");
lockButton.setUIID ("ButtonInvisible");
lockButton.addActionListener ((e)->{
unlock ();
});
lockButton.setFocusable(false);
master.add(content).add(lockButton);
}
void lock () {
lockButton.setFocusable(true);
}
void unlock () {
swipeableContainer.close ();
lockButton.setFocusable(false);
}
2 जवाब
समस्या यह है कि जब आपने lock()
का आह्वान किया तो पुनर्वैधीकरण नहीं हुआ, जिससे lockButton
को सही ढंग से नहीं रखा गया था, यह केवल तभी ठीक से स्थित होता है जब आप master
कंटेनर के किसी भी हिस्से पर क्लिक करते हैं ( स्क्रॉलिंग लागू नहीं होती है)।
समाधान हमेशा repaint()
/revalidate()
या कुछ प्रकार के एनिमेशन को प्रमुख UI परिवर्तनों के बाद कॉल करना है जैसे कंटेनर में/से घटकों को जोड़ना और हटाना।
Container master, content;
Button lockButton;
void layout () {
master = new Container (new LayeredLayout ());
content = new Container (BoxLayout.y());
content.setScrollableY (true);
lockButton = new Button ("");
lockButton.setUIID ("ButtonInvisible");
lockButton.addActionListener ((e)->{
unlock ();
});
master.add(content);
master.revalidate();
}
void lock () {
master.add(lockButton);
master.revalidate();
}
void unlock () {
lockButton.remove();
master.revalidate();
}
यह केवल सिम्युलेटर में होता है। असली डिवाइस पर सब कुछ ठीक है। माफ़ करना।
संबंधित सवाल
नए सवाल
codenameone
कोडनेम वन एक खुला स्रोत है एक बार रन एनीव्हेयर मोबाइल डेवलपमेंट प्लेटफॉर्म जो जावा और कोटलिन डेवलपर्स को देशी (आईओएस / एंड्रॉइड / विंडोज फोन आदि) एप्लिकेशन बनाने की अनुमति देता है।