Pour une partie de mon application, l'utilisateur reçoit une liste de noms et est invité à les regrouper comme il l'entend.
(Notez que le code ListView a été copié textuellement à partir du didacticiel Android Views. Je ne l'ai pas encore personnalisé en fonction de mes besoins, j'essaie simplement de comprendre comment faire fonctionner cela.)
La disposition de base est un LinearLayout, contenant un ScrollView (appelé «groupsScrollView» dans le code ci-dessous), contenant un RelativeLayout. J'ai quelques boutons et du texte, puis ma ListView en dessous, qui affiche la liste des noms. Tout cela est plus grand que la zone d'écran visible, de sorte que l'utilisateur est autorisé à faire défiler verticalement pour tout voir.
Tout cela fonctionne à merveille, sauf lorsque la page se charge, elle est toujours pré-défilée vers le haut de ma ListView - au milieu de la page. Le texte et les boutons que j'ai créés qui indiquent à l'utilisateur quoi faire ne sont pas visibles.
Je peux saisir l'écran et faire défiler vers le haut, cela fonctionne très bien, mais j'aimerais que l'écran se charge après avoir déjà été défilé vers le haut. L'utilisateur ne devrait pas avoir à faire défiler vers le HAUT pour voir le haut d'une page fraîchement chargée. Mais tout ce que j'ai essayé de faire défiler par programme vers le haut de l'écran a échoué.
Voici ma méthode 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 ligne "mainScrollView.pageScroll (View.FOCUS_UP); est le problème. Elle ne provoque pas d'erreur, mais elle ne semble rien faire. J'ai essayé scrollTo (0,0), scrollDirection (View.FOCUS_UP ), et tout ce à quoi je peux penser.
Comme je n'obtiens pas d'erreur, je dois supposer que ces commandes de défilement fonctionnent réellement, mais qu'elles défilent vers le haut de la ListView, plutôt que vers le haut de ScrollView ou RelativeLayout qui le contient. Ceci semble être confirmé par la propre description de Google de la méthode scrollTo (int x, int y) où ils disent "Cette version limite également le défilement aux limites de notre enfant.".
Donc, pour prolonger encore une longue question, comment charger un groupe de vues sur l'écran contenues dans un ScrollView, puis faire défiler le tout par programme vers le haut de la page afin que l'utilisateur puisse interagir avec lui?
Merci!