从onSizeChanged()调用时,requestLayout()无效?

Jon*_*itz 19 android android-layout

我有一个视图,在水平滚动窗口中以列的形式显示文本和图像.随着内容的变化,它会重新流动并因此(至少可能)自我调整大小; 当软键盘进出并且视图高度发生变化时,它还会回流并调整大小(保持大致恒定的区域).

我发现调用requestLayout()是有效的(在某种意义上它确实触发了对我的onMeasure()重载的调用)大部分时间......但是从我的onSizeChanged()处理程序调用时却没有.

我能够解决此职位()荷兰国际集团一个Runnable的调用requestLayout(),然后post()编另一个Runnable是叫我的代码需要运行后onMeasure()...但是这似乎有点脆弱的(我不希望添加的延迟,但我确实希望确保我的第二个Runnable在异步之后执行,onMeasure()并且可能因为它在事件循环中进行了如此多的传递,屏幕闪烁太多.

在下一个onDraw()之前是否有某种方式 - onSizeChanged()强制一个onMeasure()(可能还有另一个)onSizeChanged()

Ada*_*dam 1

我建议给班级打电话,也许两次

    interface ImGonnaTellClassBThatClassAdidFinished(){

              void ClassHasFinishedProcessing(String YaySuccess);

              void ClassHasFailedProcessing();    

              void SomethingWackaDoodleHappened(String SomeShyte);       
              }
Run Code Online (Sandbox Code Playgroud)

然后在需要它执行功能时重载该类

     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);
     }
Run Code Online (Sandbox Code Playgroud)

确保完成后回电

     class ActivityB(){

     public void hereYouGo(ImGonnaTellClassBThatClassAdidFinished finished){
     String itWorked = new String("Hooray");
     finished.ClassHasFinishedProcessing(itWorked);
     }
 }
Run Code Online (Sandbox Code Playgroud)

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