Хорошо.. Я должен пропускать что-то реальное, простое здесь, но я думаю, что пытаюсь сделать что-то довольно основное.. Просто сохраните позицию полосы прокрутки ScrollView на изменении ориентации...
Вот код для моего onSaveInstanceState и onRestoreInstanceState.. sView является контейнером для расположения ScrollView. В моем scrollview linearlayout с большим количеством textviews.
@Override
public void onSaveInstanceState(Bundle outState)
{
//---save whatever you need to persist—
outState.putInt("sViewX",sView.getScrollX());
outState.putInt("sViewY",sView.getScrollY());
super.onSaveInstanceState(outState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
sViewX = savedInstanceState.getInt("sViewX");
sViewY = savedInstanceState.getInt("sViewY");
sView.scrollTo(sViewX, sViewY);
}
Если я установил Тост со значениями sViewX и sViewY на Восстановлении, значения сохранены и корректны.
Править: Я просто попытался сделать sView.scrollTo (0,150); в моем onCreate.. только, чтобы видеть, открыло ли это действие на уровне 150 пкс вниз, и оно не сделало. Я думаю, что моя проблема имеет отношение к .scrollTo методу.
Я разобрался.
Поскольку я использую setText
для TextViews в моем onCreate
, вызов .scrollTo
не сработает.
Теперь я использую следующее:
sView.post(new Runnable() {
@Override
public void run() {
sView.scrollTo(sViewX, sViewY);
}
});