首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当从onSizeChanged()调用时,requestLayout()没有效果吗?

当从onSizeChanged()调用时,requestLayout()没有效果吗?
EN

Stack Overflow用户
提问于 2013-01-16 03:22:48
回答 2查看 5K关注 0票数 25

我有一个视图,可以在水平滚动窗口中显示列中的文本和图像。它会重排,因此(至少可能)会随着其内容的变化而调整自身的大小;当软键盘来来去去以及视图高度发生变化时,它也会重排并调整大小(保持一个大致恒定的区域)。

我发现,在大多数情况下,调用requestLayout()都是有效的(从某种意义上说,它确实会触发对onMeasure()重载的调用)……但从我的onSizeChanged()处理程序调用时就不是这样了。

我可以通过以下方式解决这个问题:post()一个名为requestLayout()Runnable,然后post()ed另一个Runnable,该Runnable调用需要在onMeasure()之后运行的代码……但这看起来有点脆弱(我不想添加延迟,但我确实想确保我的第二个Runnable确实在异步onMeasure()之后执行),也许因为它在事件循环中执行了太多次,屏幕闪烁得太多。

有没有办法-在onSizeChanged()中-强制onMeasure() (可能还有另一个onSizeChanged())在下一个onDraw()之前发生

EN

回答 2

Stack Overflow用户

发布于 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);
     }
 }

希望这对你有所帮助,祝你好运。

票数 1
EN

Stack Overflow用户

发布于 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());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14345287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档