我有一个视图,可以在水平滚动窗口中显示列中的文本和图像。它会重排,因此(至少可能)会随着其内容的变化而调整自身的大小;当软键盘来来去去以及视图高度发生变化时,它也会重排并调整大小(保持一个大致恒定的区域)。
我发现,在大多数情况下,调用requestLayout()都是有效的(从某种意义上说,它确实会触发对onMeasure()重载的调用)……但从我的onSizeChanged()处理程序调用时就不是这样了。
我可以通过以下方式解决这个问题:post()一个名为requestLayout()
的Runnable,然后post()
ed另一个Runnable
,该Runnable
调用需要在onMeasure()
之后运行的代码……但这看起来有点脆弱(我不想添加延迟,但我确实想确保我的第二个Runnable
确实在异步onMeasure()
之后执行),也许因为它在事件循环中执行了太多次,屏幕闪烁得太多。
有没有办法-在onSizeChanged()
中-强制onMeasure()
(可能还有另一个onSizeChanged()
)在下一个onDraw()之前发生
发布于 2014-05-03 11:06:01
我建议回调一个类,也许两个
interface ImGonnaTellClassBThatClassAdidFinished(){
void ClassHasFinishedProcessing(String YaySuccess);
void ClassHasFailedProcessing();
void SomethingWackaDoodleHappened(String SomeShyte);
}
然后,在需要它来执行函数时重载该类
public class FunctionA{
ImGonnaTellClassBThatClassAdidFinished someName = new ImGonnaTellClassBThatClassAdidFinished(){
@Override
void ClassHasFinishedProcessing(String YaySuccess){
//Well I should Call class B with the info then
//Heres Sting YaySuccess, Use it in the right way
}
void ClassHasFailedProcessing(){
//Well I failed and should let someone know
}
void SomethingWackaDoodleHappened(String SomeShyte){
//Well Something else happened and I have some info on it
}
//Dont forget to pass it to the class
ClassB doWorkMeow = new ClassB();
doWorkMeow.hereYouGo(someName);
}
完成后一定要回电
class ActivityB(){
public void hereYouGo(ImGonnaTellClassBThatClassAdidFinished finished){
String itWorked = new String("Hooray");
finished.ClassHasFinishedProcessing(itWorked);
}
}
希望这对你有所帮助,祝你好运。
发布于 2016-02-02 20:37:16
视图实现有一个onlayout回调方法,允许您修改子视图和视图在父布局中的位置。
发布于 2017-05-16 18:45:03
我像这样推迟了通话,解决了这个问题:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
post(() -> someMethod());
}
https://stackoverflow.com/questions/14345287
复制相似问题