telefonicas por numero mexico llamar llamadas internet internacionales hacer gratis google funciona como android android-layout

android - por - requestLayout() no tiene efecto cuando se llama desde onSizeChanged()?



llamadas telefonicas por internet (3)

Tengo una vista que muestra textos e imágenes en columnas, en una ventana de desplazamiento horizontal. Refleja y, por lo tanto, (al menos potencialmente) cambia su tamaño a medida que cambia su contenido; también se reajusta y cambia de tamaño (manteniendo un área aproximadamente constante) cuando el teclado suave va y viene y la altura de la vista cambia.

Lo que descubrí fue que la llamada a requestLayout() funciona (en el sentido de que sí onMeasure() una llamada a mi sobrecarga onMeasure() ) la mayor parte del tiempo ... pero no cuando se llama desde mi controlador onSizeChanged() .

Pude evitar esto al post() un Runnable que se llamó requestLayout() y luego post() otro Runnable que llamó a mi código que debe ejecutarse después de onMeasure() ... pero esto parece un poco frágil ( No quiero agregar un retraso, pero quiero asegurarme de que mi segundo Runnable se ejecute después de async onMeasure() ) y, tal vez porque hace muchos pases a través del bucle de eventos, la pantalla parpadea demasiado.

¿Hay alguna forma, en un onSizeChanged() , para forzar un onMeasure() (y, probablemente, otro onSizeChanged() ) para que ocurra antes del próximo onDraw() ?


La implementación de la vista tiene un método de devolución de llamada onlayout que le permite modificar las vistas secundarias y el posicionamiento de la vista dentro del diseño principal.


Resolví el problema posponiendo la llamada de esta manera:

@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); post(() -> someMethod()); }


Yo sugeriría hacer una llamada de regreso de clase, tal vez dos

interface ImGonnaTellClassBThatClassAdidFinished(){ void ClassHasFinishedProcessing(String YaySuccess); void ClassHasFailedProcessing(); void SomethingWackaDoodleHappened(String SomeShyte); }

Luego sobrecargue la clase cuando la necesite para realizar funciones

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); }

Asegúrate de volver a llamar cuando hayas terminado.

class ActivityB(){ public void hereYouGo(ImGonnaTellClassBThatClassAdidFinished finished){ String itWorked = new String("Hooray"); finished.ClassHasFinishedProcessing(itWorked); } }

Espero que esto ayude, buena suerte en tu esfuerzo.