這裏是代碼示例來面對我的問題。Codename One - 有沒有辦法避免點擊時更改Button的UIID?
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();
}
ButtonInvisible 選擇,未被選擇和按壓樣式是相等的。
問題描述:
- 滾動
content
向下 - 調用
lock()
- 點擊
content
(lockButton
截距點擊) - 當按下指針
content
的滾動是0,上釋放,它返回到之前的金額。
我想這會發生,因爲按鈕更改它是單擊樣式,這會導致重新繪製/重新驗證基礎內容的錯誤。
根據鑽石的回答
信息更新:
集裝箱master
是SwipeableContainer
中心部分。
無論何時打開SwipeableContainer
,都會調用方法lock()
。
如果我調用revalidate()
當SwipeableContainer
打開 - 屏幕奇怪地閃爍,但行爲沒有改變 - 每當按下按鈕滾動仍然跳轉到零。
也許是顯著 - 有集裝箱content
Tabs
組件在此版本的代碼重新確認的不能是這種問題的一個原因,因爲沒有組件添加或移除,但問題仍然是相同的。
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);
}
我發現這個問題很難從描述中理解。但是這裏有幾件事我可以說。按鈕不會更改UIID。樣式更改不會重新驗證或影響滾動。一些截圖或視頻可以用來解釋什麼很快解釋 –
感謝您的關注,我會盡可能快地提供視頻。 –
這件事只發生在模擬器上,在設備上一切都很完美。抱歉。 –