Для части моего приложения пользователю предоставляется список имен, и ему предлагается сгруппировать их по своему усмотрению.
(Обратите внимание, что код ListView дословно скопирован из учебника по Android Views. Я еще не настроил его под свои нужды, я просто пытаюсь выяснить, как заставить это работать.)
Базовый макет представляет собой LinearLayout, содержащий ScrollView (называемый «groupsScrollView» в приведенном ниже коде), содержащий RelativeLayout. У меня есть несколько кнопок и текста, а затем мой ListView, который отображает список имен. Все это выше видимой области экрана, поэтому пользователю предоставляется возможность прокрутки по вертикали, чтобы увидеть все это.
Все это прекрасно работает, за исключением того, что когда страница загружается, она всегда предварительно прокручивается в верхнюю часть моего ListView - в середине страницы. Текст и кнопки, которые я создал, сообщают пользователю, что делать, не видны.
Я могу схватить экран и прокрутить вверх, это прекрасно работает, но я бы хотел, чтобы экран загружался уже после прокрутки вверх. Пользователю не нужно прокручивать UP, чтобы увидеть верхнюю часть недавно загруженной страницы. Но все, что я пытался программно прокрутить до верхней части экрана, не удалось.
Вот мой метод 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();
}
});
}
Строка "mainScrollView.pageScroll (View.FOCUS_UP); это проблема. Она не вызывает ошибку, но, похоже, ничего не делает. Я пробовал scrollTo (0,0), scrollDirection (View.FOCUS_UP). ) и все остальное, что я могу придумать.
Поскольку я не получаю сообщение об ошибке, я должен предположить, что эти команды прокрутки действительно работают, но они прокручиваются до верхней части ListView, а не до верхней части ScrollView или RelativeLayout, который его содержит. Это подтверждается собственным описанием Google метода scrollTo (int x, int y), в котором говорится: «Эта версия также ограничивает прокрутку до границ нашего ребенка».
Итак, чтобы сделать длинный вопрос еще длиннее, как я могу загрузить несколько представлений на экране, содержащихся в ScrollView, а затем программно прокрутить все это вверх страницы, чтобы пользователь мог взаимодействовать с ним?
Спасибо!