W przypadku części mojej aplikacji użytkownikowi wyświetla się lista nazwisk i jest proszona o pogrupowanie ich według własnego uznania.
(Uwaga: kod ListView został dosłownie skopiowany z samouczka Android Views. Nie dostosowałem go jeszcze do moich potrzeb, po prostu próbuję dowiedzieć się, jak to działa).
Podstawowy układ to LinearLayout, zawierający ScrollView (o nazwie „groupsScrollView” w poniższym kodzie), zawierający RelativeLayout. Mam kilka przycisków i tekst, a następnie mój ListView poniżej, który wyświetla listę nazw. Wszystko to jest wyższe niż widoczny obszar ekranu, więc użytkownik może przewijać w pionie, aby zobaczyć wszystko.
To wszystko działa pięknie, z wyjątkiem tego, że kiedy strona się ładuje, jest zawsze przewijana wstępnie na górę mojego ListView - na środku strony. Utworzony przeze mnie tekst i przyciski, które mówią użytkownikowi, co należy zrobić, nie są widoczne.
Mogę chwycić ekran i przewinąć w górę, to działa dobrze, ale chciałbym, aby ekran załadował się po przewinięciu do góry. Użytkownik nie powinien przewijać W GÓRĘ, aby zobaczyć górę świeżo załadowanej strony. Ale wszystko, co próbowałem programowo przewinąć do góry ekranu, zawiodło.
Oto moja metoda 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();
}
});
}
Problem stanowi wiersz "mainScrollView.pageScroll (View.FOCUS_UP);. Nie powoduje on błędu, ale wydaje się, że nic nie robi. Próbowałem scrollTo (0,0), scrollDirection (View.FOCUS_UP ) i wszystko inne, co przychodzi mi do głowy.
Ponieważ nie pojawia się błąd, muszę założyć, że te polecenia przewijania faktycznie działają, ale przewijają się do góry ListView, a nie do góry ScrollView lub RelativeLayout, który je zawiera. Wydaje się to potwierdzać własny opis metody scrollTo (int x, int y) firmy Google, w którym mówi się: „Ta wersja ogranicza również przewijanie do granic naszego dziecka”.
Aby więc długie pytanie było jeszcze dłuższe, w jaki sposób załadować kilka widoków na ekranie zawartym w ScrollView, a następnie programowo przewijać całość na górę strony, aby użytkownik mógł z nią wchodzić w interakcję?
Dzięki!