【问题标题】:How to get back on the Webview page on Backbutton click, if any url is opened in Webview?如果在 Webview 中打开了任何 url,如何在 Back Button 单击时返回 Webview 页面?
【发布时间】:2014-07-02 15:15:04
【问题描述】:

我有一个活动,其中 Webview 可用。如果我单击 webview 中的任何 URL,该 URL 会打开,但是当我单击后退按钮时,它不会出现在上一个 Webview 页面上,而是进入该 webview 页面之前的活动。

场景:- 我有一个 Xyz 活动,在 Xyz 活动的某些元素上单击它会转到一个 Webview 活动,该活动在 webview 上显示加载的 url。如果我单击任何 url 链接,它会在 webview 上打开,但是当我单击后退按钮时,它会返回 Xyz Activity 而不是 Webview Activity。我想回到 Webview Activity 而不是 Xyz Activity。

任何人都可以指导我吗,因为我无法找到我应该使用或实施什么来使其按我的需要工作? 任何帮助将不胜感激。提前致谢...

编辑:-

代码如下:-

public class StoryDetail extends SherlockActivity
{
    WebView content;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.story_detail);

    BaseStory story = BaseStory.createFromCursor(c); // BaseStory is a class containing Database values...

    // Get the fields
    content = (WebView) findViewById(R.id.content);
    content.getSettings().setPluginState(PluginState.ON_DEMAND);
    content.getSettings().setJavaScriptEnabled(true);
    content.getSettings().setAllowFileAccess(true);
    content.setWebChromeClient(new WebChromeClient());
    content.setWebViewClient(new WebViewClient());

    String html = 
        "<html><head>" + 
            "</head>" +
        "<body>" +

            "<section id=\"content\">" +
                story.getContent() + 
            "</section>" +
        "</body></html>"; //story.getContent() contains title, image, and url link supporting HTML Format itself. 
    //On clicking url link the webview open that page in Webview.

    content.loadDataWithBaseURL("http://somelink/", html, "text/html", "UTF-8", "");

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(event.getAction() == KeyEvent.ACTION_DOWN){
        switch(keyCode)
        {
        case KeyEvent.KEYCODE_BACK:
            if(content.canGoBack()){
                content.goBack();
            }else{
                finish();
            }
            return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

}

【问题讨论】:

  • @Apoorv 感谢您的链接,它有效,但是当它返回 Webview 页面时,它没有显示 Webview 中存在的任何 Html,任何想法如何再次包含它?

标签: android webview


【解决方案1】:

试试这个,它会达到你的目的

webView.setOnKeyListener(new OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
    if(event.getAction() == KeyEvent.ACTION_DOWN)
    {
        WebView webView = (WebView) v;

        switch(keyCode)
        {
            case KeyEvent.KEYCODE_BACK:
                if(webView.canGoBack())
                {
                    webView.goBack();
                    return true;
                }
                break;
        }
    }

    return false;
}

});

对于 Android 2.2 及更高版本,请执行以下操作:

@Override
public void onBackPressed()
{
    if(webView.canGoBack())
        webView.goBack();
    else
        super.onBackPressed();
}

【讨论】:

  • 它工作正常,但是我的 WEBview 活动中有一个 HTML 标记,当它回来时,它在我的 Webview 活动中没有显示任何内容,显示一个空白屏幕。我应该怎么做才能重新获得我的 Webview 活动的 HTML 标记?
【解决方案2】:

使用这个方法。

正如您的目标 Webview 声明的那样:

WebView myWebView;

跟随以下:

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(event.getAction() == KeyEvent.ACTION_DOWN){
        switch(keyCode)
        {
        case KeyEvent.KEYCODE_BACK:
            if(myWebView.canGoBack()){
                myWebView.goBack();
            }else{
                finish();
            }
            return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

更新:

通过以下方式记录历史:

WebBackForwardList myWebBackForwardList = myWebView.copyBackForwardList();
String historyUrl = myWebBackForwardList.getItemAtIndex(myWebBackForwardList.getCurrentIndex()-1).getUrl();

然后是返回按钮:

historyUrl.goBack();

【讨论】:

  • 它工作正常,但是我的 WEBview 活动中有一个 HTML 标记,当它回来时,它在我的 Webview 活动中没有显示任何内容,显示一个空白屏幕。我应该怎么做才能重新获得我的 Webview 活动的 HTML 标记?
  • 发布你的代码,让我先看看
  • 你可以尝试在调用 loadDataWithBaseURL 时设置 historyUrl 参数吗?
  • 我该怎么做,你能提供一些方法或更多细节吗?
  • 在后退按钮上它说-“方法 goBack() 未定义为 String 类型”。因此给出错误。
【解决方案3】:

链接正在打开到一个新的 webview 意图。 这就是为什么当您单击后退按钮时,后退按钮的默认事件是 正在调用“返回一个意图”。

像 Badrul 那样覆盖它是我认为最好的方式。

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多