我在保存方向更改期间Android的WebView控件中加载的内容的当前滚动位置时存在问题。在Android 2.1的方向更改期间保存WebView滚动位置的问题
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mWebView = new WebView(this);
setContentView(mWebView);
mWebView.setWebViewClient(mWebViewClient);
if (savedInstanceState != null)
{
final WebBackForwardList list = mWebView.restoreState(savedInstanceState);
if (list == null)
return;
if (savedInstanceState.containsKey("currentPicture"))
{
final File f = new File(savedInstanceState.getString("currentPicture"));
mWebView.restorePicture(savedInstanceState, f);
f.delete();
}
}else
mWebView.loadUrl("http://slashdot.org/");
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
final WebBackForwardList list = mWebView.saveState(outState);
File mThumbnailDir = getDir("thumbnails", 0);
if (list != null)
{
final File f = new File(mThumbnailDir, mWebView.hashCode() + "_pic.save");
if (mWebView.savePicture(outState, f))
outState.putString("currentPicture", f.getPath());
}
}
此代码工作在Android 1.5系统,1.6和:这个问题目前仅在Android 2.1及Android 2.1的更新1
,我使用的是基于默认的浏览器应用程序,看起来像这样的代码存在2.0.1。在Android 2.1中,相同的代码恢复了分秒的位置,但页面重新加载并滚动到位置0,0。
在Android 2.1的更新1,它不仅向后滚动到0,0,而且还改变了缩放到适合页面宽度(类似于2.1引入了浏览器概述模式)
有谁知道的解决方法或有任何想法可能会导致此类行为?
您是否尝试过比较两个版本之间的WebView源代码,看看有哪些变化?可能会给出线索,发生什么事情.. – 2010-02-11 01:27:18
我确实尝试过比较来源。在1.6和2.0之间有很大的变化(包括添加概览模式)。除非您真的了解WebView的内部工作原理,否则很难弄清究竟是什么导致了这种行为变化。更令人沮丧的是,我甚至无法通过我拥有的源代码进行调试,因为我没有与它运行的模拟器或设备匹配的源的确切版本。 – StefanK 2010-02-11 21:26:04
这可以解决方向更改的问题,但不适用于离开活动并稍后返回的用户。看来,该位置没有正确存储在Bundle中 - 或者该值被忽略。 – ge0rg 2011-09-26 14:11:24