Per parte della mia app, all'utente viene presentato un elenco di nomi e viene chiesto di raggrupparli come meglio crede.
(Nota, il codice ListView è stato copiato alla lettera dal tutorial di Android Views. Non l'ho ancora personalizzato in base alle mie esigenze, sto solo cercando di capire come farlo funzionare.)
Il layout di base è un LinearLayout, contenente un ScrollView (chiamato "groupsScrollView" nel codice seguente), contenente un RelativeLayout. Ho alcuni pulsanti e testo, e poi il mio ListView sotto quello, che mostra l'elenco dei nomi. Tutto questo è più alto dell'area dello schermo visibile, quindi all'utente è consentito scorrere verticalmente per vedere tutto.
Tutto funziona magnificamente, tranne quando la pagina viene caricata è sempre pre-scrollata all'inizio del mio ListView - al centro della pagina. Il testo e i pulsanti che ho creato che indicano all'utente cosa fare non sono visibili.
Posso afferrare lo schermo e scorrere verso l'alto, che funziona bene, ma vorrei che lo schermo si caricasse essendo già stato fatto scorrere verso l'alto. L'utente non dovrebbe scorrere verso SU per vedere la parte superiore di una pagina appena caricata. Ma tutto ciò che ho provato a scorrere programmaticamente nella parte superiore dello schermo non è riuscito.
Ecco il mio metodo 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 riga "mainScrollView.pageScroll (View.FOCUS_UP); è il problema. Non causa un errore, ma non sembra fare nulla. Ho provato scrollTo (0,0), scrollDirection (View.FOCUS_UP ) e tutto ciò a cui riesco a pensare.
Dal momento che non ricevo un errore, devo presumere che questi comandi di scorrimento stiano effettivamente funzionando, ma che stiano scorrendo verso la parte superiore di ListView, anziché verso la parte superiore di ScrollView o RelativeLayout che lo contiene. Ciò sembra essere confermato dalla descrizione di Google del metodo scrollTo (int x, int y) in cui si dice "Questa versione blocca anche lo scorrimento fino ai limiti di nostro figlio".
Quindi, per rendere ancora più lunga una lunga domanda, come faccio a caricare un sacco di visualizzazioni sullo schermo contenuto in uno ScrollView, e quindi scorrere a livello di codice l'intera cosa nella parte superiore della pagina in modo che l'utente possa interagire con essa?
Grazie!