0

加载了一个相当具体的网页WebView,其中的 URL 就像http://www.site.com/mob/(基本上是移动优化的网页)。此网页仅显示 25 篇文章,底部有一个“更多文章”按钮。

当用户按下它时,我会捕获 URL http://www.site.com/Web/MobHomeItems.aspx?page=N(其中 N 是 2、3、4...),然后在同一屏幕上加载了另外 25 个项目。

现在,当我单击某篇文章并转到文章详细信息,然后通过返回键返回该页面时,WebView 忘记了已加载了多少篇文章,而只是加载了显示 25 篇文章的默认页面。想象一下,如果用户来到第 100 篇文章,这将是多么令人沮丧。

我尝试覆盖 inWebClient和 in 的许多方法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。加载提到的 URLhttp://www.site.com/Web/MobHomeItems.aspx?page=N并没有帮助,因为它将这个具体页面加载到WebView唯一的页面中,并且它不会将此第 N 个页面附加到主页。

编辑

正如@Raghunandan 所问的那样,我在加载回第一页()时没有问题?page=1。当用户在文章详细信息上按下返回按钮时,这是默认设置。我想在按下 article details 之前加载到用户所在的页面。如果他在?page=100,我想加载回那个页面,例如我想打开 25x100 的文章。同样,默认始终是“打开 25 篇文章或?page=1http://www.site.com”。

4

2 回答 2

1

覆盖 WebViewClient 的 shouldOverrideUrlLoading 方法。

像这样:

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. 用户点击文章详情的一个链接。
  2. shouldOverriderUrlLoading 将被触发。
  3. 我们创建了一个新的 WebView 来打开 url。
  4. 隐藏当前页面
  5. 用户阅读文章
  6. 用户点击返回键,关闭newOne WebView,然后使之前的WebView可见。文章列表会立即显示,保持旧语句

.

于 2013-09-04T15:37:18.997 回答
0

还有另一种方法可以做到这一点。

WebSettings 有一个私有方法 "setPageCacheCapacity" ,默认值为 0 ,你可以放大它(可能是 5)。

您可以通过使用 java 的反射来访问此方法。

该方法可以使 WebView 缓存多个文档。换句话说。当用户按下返回键时,WebView 将返回到旧文档。

于 2013-09-05T09:15:56.140 回答