Para parte de mi aplicación, se le presenta al usuario una lista de nombres y se le pide que los agrupe como mejor le parezca.
(Tenga en cuenta que el código ListView se copió literalmente del tutorial de Vistas de Android. Todavía no lo he personalizado a mis necesidades, solo estoy tratando de descubrir cómo hacer que esto funcione).
El diseño básico es un LinearLayout, que contiene un ScrollView (llamado "groupsScrollView" en el código a continuación), que contiene un RelativeLayout. Tengo algunos botones y texto, y luego mi ListView debajo de eso, que muestra la lista de nombres. Todo esto es más alto que el área de pantalla visible, por lo que el usuario puede desplazarse verticalmente para verlo todo.
Todo esto funciona a la perfección, excepto cuando la página se carga, siempre se desplaza previamente a la parte superior de mi ListView, en el medio de la página. El texto y los botones que he creado que le dicen al usuario qué hacer no están visibles.
Puedo tomar la pantalla y desplazarme hacia arriba, eso funciona bien, pero me gustaría que la pantalla se cargue ya que se ha desplazado hacia la parte superior. El usuario no debería tener que desplazarse hacia ARRIBA para ver la parte superior de una página recién cargada. Pero todo lo que he intentado desplazar programáticamente a la parte superior de la pantalla ha fallado.
Aquí está mi método onCreate:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.groups);
mainScrollView = (ScrollView)findViewById(R.id.groupsScrollView);
//get the Bundle out of the Intent...
Bundle extras = getIntent().getExtras();
mNames = extras.getStringArray("mNames");
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, mNames));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
//This is the line I'm having issues with
mainScrollView.pageScroll(View.FOCUS_UP);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
}
});
}
La línea "mainScrollView.pageScroll (View.FOCUS_UP) es el problema. No causa un error, pero no parece hacer nada. He intentado scrollTo (0,0), scrollDirection (View.FOCUS_UP ), y todo lo demás que se me ocurre.
Como no recibo un error, debo suponer que estos comandos de desplazamiento funcionan realmente, pero que se desplazan hacia la parte superior de ListView, en lugar de la parte superior de ScrollView o RelativeLayout que lo contiene. Esto parece ser confirmado por la propia descripción de Google del método scrollTo (int x, int y) donde dicen "Esta versión también sujeta el desplazamiento a los límites de nuestro hijo".
Entonces, para hacer una pregunta larga aún más larga, ¿cómo cargo un montón de vistas en la pantalla contenida dentro de una Vista de desplazamiento y luego desplazo todo el programa por la parte superior de la página para que el usuario pueda interactuar con ella?
¡Gracias!