如果在Webview中打开了任何URL,如何返回Back Button上的Webview页面?

时间:2014-07-01 06:27:25

标签: android webview

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

Scenerio: - 我正在使用Xyz活动,在Xyz活动的某些元素上单击它转到Webview活动,该活动显示webview上加载的URL。在webview上,如果我点击任何网址链接,它会打开,但是当我点击后退按钮时,它会返回到Xyz活动而不是Webview活动。我想回到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);
}

}

3 个答案:

答案 0 :(得分:5)

试试这个,它将满足您的目的

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();
}

答案 1 :(得分:1)

使用此方法。

当您的目标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();

答案 2 :(得分:0)

该链接正在打开一个新的webview意图。 这就是为什么当你单击后退按钮时,后退按钮的默认事件就是 &#34;回归一个意图&#34;正在被召唤。

如Badrul所做的那样覆盖它是我相信的最佳方式。