Para parte do meu aplicativo, o usuário recebe uma lista de nomes e é solicitado a agrupá-los como acharem melhor.
(Observe que o código do ListView foi copiado literalmente do tutorial do Android Views. Ainda não o personalizei de acordo com minhas necessidades, estou apenas tentando descobrir como fazer isso funcionar.)
O layout básico é um LinearLayout, contendo um ScrollView (chamado "groupsScrollView" no código abaixo), contendo um RelativeLayout. Eu tenho alguns botões e texto e, em seguida, meu ListView abaixo dele, que exibe a lista de nomes. Como tudo isso é mais alto que a área visível da tela, o usuário pode rolar verticalmente para ver tudo.
Tudo isso funciona muito bem, exceto quando a página é carregada, ela é sempre pré-rolada para a parte superior do meu ListView - no meio da página. O texto e os botões que criei que informam ao usuário o que fazer não são visíveis.
Posso pegar a tela e rolar para cima, isso funciona muito bem, mas gostaria que a tela carregasse já tendo sido rolada para o topo. O usuário não precisa rolar para CIMA para ver a parte superior de uma página recém-carregada. Mas tudo o que tentei rolar programaticamente para o topo da tela falhou.
Aqui está o meu 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();
}
});
}
A linha "mainScrollView.pageScroll (View.FOCUS_UP); é o problema. Não causa um erro, mas parece não fazer nada. Tentei scrollTo (0,0), scrollDirection (View.FOCUS_UP ) e tudo o mais em que posso pensar.
Como não recebo um erro, devo assumir que esses comandos de rolagem estão realmente funcionando, mas estão rolando para a parte superior do ListView, em vez da parte superior do ScrollView ou RelativeLayout que o contém. Isso parece ser confirmado pela própria descrição do Google do método scrollTo (int x, int y), onde eles dizem "Esta versão também restringe a rolagem aos limites do nosso filho".
Portanto, para tornar uma pergunta longa ainda mais longa, como carrego várias visualizações na tela contidas em um ScrollView e depois rumo programaticamente a coisa toda para o topo da página para que o usuário possa interagir com ela?
Obrigado!