好的..我必须在这里忽略一些非常简单的东西,但我想我正在尝试做一些相当基本的事情.只需保留ScrollView的滚动条位置以改变方向...
这是我的onSaveInstanceState和onRestoreInstanceState的代码.sView是ScrollView布局的容器.在我的滚动视图中是一个带有大量textview的线性布局.
@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);
}
Run Code Online (Sandbox Code Playgroud)
如果我在恢复时使用sViewX和sViewY的值设置Toast,则值保持正确.
编辑:我刚尝试做一个sView.scrollTo(0,150); 在我的onCreate ..只是为了看看是否会以150px的速度打开活动,但事实并非如此.我认为我的问题与.scrollTo方法有关.
例如,我有这样的布局:
<ScrollView>
<LinearLayout>
<LinearLayout>
...
</LinearLayout>
<LinearLayout>
...
</LinearLayout>
<LinearLayout>
<TextView>
</TextView>
</LinearLayout>
</LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
我的TextView内容很长.现在我可以手动滚动ScrollView到TextView内容的末尾.在代码中,我写道:scrview.scrollTo(0, 800);使用scrview是我的ScrollView.它应该滚动到TextView内容的中间.但是在运行时,它只会滚动到TextView的开头,无法滚动TextView内容.
有人知道导致这个问题的原因吗?
编辑:我找到了.好像我太早叫做scrollTo了.运用
scrview.post(new Runnable() {
public void run() {
scrview.scrollTo(0, 800);
}
});
Run Code Online (Sandbox Code Playgroud)
相反,它的工作原理.为任何遇到同样问题的人发布答案.