मेरी समस्या का सामना करने के लिए कोड उदाहरण यहां दिया गया है।

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 ();
}

बटन अदृश्य चयनित, अचयनित और दबाया गया शैलियां समान हैं।

समस्या विवरण:

  1. content नीचे स्क्रॉल करें
  2. आह्वान lock()
  3. content पर क्लिक करें (lockButton इंटरसेप्ट क्लिक करें)
  4. जबकि पॉइंटर को दबाया जाता है 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);
}
0
user7436930 21 जुलाई 2017, 19:38

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();
}
2
Diamond 22 जुलाई 2017, 04:27

यह केवल सिम्युलेटर में होता है। असली डिवाइस पर सब कुछ ठीक है। माफ़ करना।

0
Andrew Snejovski 23 जुलाई 2017, 15:26