【发布时间】:2017-07-23 20:26:38
【问题描述】:
这是解决我的问题的代码示例。
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 selected、unselected 和 pressed 样式是相等的。
问题描述:
- 向下滚动
content - 调用
lock() - 点击
content(lockButton拦截点击) - 当指针被按下时
content的滚动为 0,释放时它返回到之前的量。
我猜这是因为 Button 在点击时改变了它的样式,这会导致底层内容的重新绘制/重新验证错误。
根据 Diamond 的回答更新
其他信息:
容器master 是SwipeableContainer 的中心部分。
只要打开SwipeableContainer,就会调用方法lock()。
如果我在SwipeableContainer 打开时调用revalidate() - 屏幕奇怪地闪烁,但行为没有改变 - 每当按下按钮时,滚动仍然跳到零。
也许这很重要 - 容器 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。样式更改不会重新验证或影响滚动。几张截图或一段视频可以很好地解释发生了什么
-
感谢您的关注,我会尽快提供视频。
-
这件事只发生在模拟器中,在设备上一切都是完美的。对不起。
标签: codenameone