ScrollView .scrollTo无法正常工作?在旋转时保存ScrollView位置

kef*_*efs 44 android

好的..我必须在这里忽略一些非常简单的东西,但我想我正在尝试做一些相当基本的事情.只需保留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方法有关.

kef*_*efs 122

我想到了.

因为我在使用setTextTextViews onCreate,所以调用.scrollTo不起作用.

所以现在我使用以下内容:

sView.post(new Runnable() {
    @Override
    public void run() {
        sView.scrollTo(sViewX, sViewY);
    } 
});
Run Code Online (Sandbox Code Playgroud)

  • 对于仍然想知道为什么会这样有效的人,因为ScrollView在添加到布局之前无法滚动.将ScrollView添加到视图时调用post(Runnable),因此可以滚动.类似的问题是`View.getWidth()`返回`0`,如[here]所述(http://stackoverflow.com/questions/18268915/views-getwidth-and-getheight-returning-0) (10认同)
  • 我不明白,但它似乎工作!谢谢. (7认同)