在WebView
中加载了一个相当具体的网页,其网址类似于http://www.site.com/mob/
(基本上是针对移动设备优化的网页)。此网页仅显示25篇文章,底部显示“更多文章”按钮。
当用户按下它时,我会抓住网址http://www.site.com/Web/MobHomeItems.aspx?page=N
(其中N是2,3,4 ......),之后又在同一个屏幕上加载了25个项目。
现在,当我点击某篇文章并转到文章详细信息,然后通过返回键返回页面时,WebView
会忘记已加载了多少篇文章加载默认页面,显示25篇文章。想象一下,如果用户来到第100篇文章,这将是多么令人沮丧。
我尝试覆盖WebClient
和WebChromeClient
中的许多方法,但到目前为止,我无法加载通过“更多文章”按钮加载的N个页面。例如,我首先认为这会有所帮助,但事实并非如此。
@Override
public void onLoadResource(WebView view, String url) {
//http://www.site.com/Web/MobHomeItems.aspx?page=2
if (url.contains("?page=")) {
//save this URL for later and on return from
// article details, pass it to LoadResource()
super.onLoadResource(view, url);
}
然后我尝试了与其他方法类似的方法 - 基本上记住主页上已加载了多少页,然后从文章详细信息返回时,只需告诉webview加载此URL。
任何人都可以帮助我吗?如何将加载的页面附加到主页面?我可以在这里使用JavaScript
吗?
PS。加载提到的URL http://www.site.com/Web/MobHomeItems.aspx?page=N
没有帮助,因为它只将此具体页面加载到WebView
,并且它不会将此第N页附加到主页面。
修改
正如@Raghunandan所问,我没有问题加载回第一页(?page=1
)。当用户在文章详细信息上按“返回”按钮时,这是默我想在按文章详细信息之前将加载到用户所在的页面。如果他在?page=100
,我想加载回该页面,例如我希望打开25x100篇文章。同样,默认值始终是“打开25篇文章或?page=1
或http://www.site.com
”。
答案 0 :(得分:1)
覆盖方法shouldOverrideUrlLoading of WebViewClient。
像这样:public boolean shouldOverrideUrlLoading (WebView view, String url) {
if (url is kind of article detail) {
WebView newOne = new WebView(); // create a new Webview for displaying the details.
view.setVisibility(View.INVISIBLE); // hiding current page (article list)
return true; // To tell the WebView we have process this url.
}
return false;
}
答案 1 :(得分:0)
还有另一种方法可以做到这一点。
WebSettings有一个私有方法“setPageCacheCapacity”,默认值为0,你可以放大它(可能是5)。
您可以使用java的反射来访问此方法。
该方法可以使WebView缓存多个文档。换句话说。当用户按后退键时,WebView将返回旧文档。