2012-06-28 14 views
7

Por ejemplo, tengo una disposición como ésta:Método Android ScrollView scrollTo() que no funciona con TextView?

<ScrollView> 
    <LinearLayout> 
    <LinearLayout> 
     ... 
    </LinearLayout> 
    <LinearLayout> 
     ... 
    </LinearLayout> 
    <LinearLayout> 
     <TextView> 
     </TextView> 
    </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

Mi TextView tienen un contenido mucho tiempo. Ahora puedo desplazar el ScrollView manualmente hasta el final del contenido de TextView. En el código, escribo: scrview.scrollTo(0, 800);, con scrview es mi ScrollView. Se supone que se desplaza al medio del contenido de TextView. Pero cuando se ejecuta, solo se desplazó al inicio de TextView y no puede desplazarse por el contenido de TextView.

¿Alguien sabe qué está causando este problema?

EDIT: Lo encontré. Parece que llamo scrollTo demasiado pronto. Usando

scrview.post(new Runnable() { 
       public void run() { 
        scrview.scrollTo(0, 800); 
       } 
      }); 

y funciona. Publicó la respuesta para cualquier persona que tenga el mismo problema.

Respuesta

2

En primer lugar, si todos sus LinearLayouts tienen la misma orientación, ¿por qué no simplemente lo crea solo una vez? Si no me equivoco, ScrollView solo puede tener 1 hijo (1 hijo directo). Quizás esa sea probablemente la razón de tus problemas. Sin embargo, si aún desea esos 3 LinearLayouts, puede crear un FrameLayout como padre para mantenerlos y hacer que FrameLayout sea el elemento secundario de ScrollView

+0

Mi mal. Mi pregunta no es lo suficientemente clara. Este es solo el código de muestra para todos, fácil de entender, así que olvidé algunos detalles. Ya tengo una vista principal que contiene toda la vista dentro de ScrollView. Y este problema aún ocurrió. Edité mi pregunta – user1417127

19

Lo encontré. Parece que llamo scrollTo demasiado pronto. Usando

scrview.post(new Runnable() { 
       public void run() { 
        scrview.scrollTo(0, 800); 
       } 
      }); 

y funciona. Publicó la respuesta para cualquier persona que tenga el mismo problema.

+1

800 milisegundos es un largo tiempo de espera. ¿Es realmente necesario y hay una forma de hacerlo sin elegir un plazo arbitrario que puede ser demasiado largo o corto? –

+0

@EdwinEvans [this] (http://stackoverflow.com/a/18930335/4348328) la respuesta resolvió un problema relacionado sin la necesidad de demoras arbitrarias. – mpkuth

Cuestiones relacionadas