【问题标题】:ImageButton in ActionBar for GoBack in WebView用于 WebView 中 GoBack 的 ActionBar 中的 ImageButton
【发布时间】:2013-12-20 14:47:29
【问题描述】:

我正在使用 Fragments,我的一个 Fragment 有一个 webview。我想添加一个图像按钮,让用户返回。

我有 4 个 Fragment,它们的名字是 Fragment1,Fragment2,Fragment3,Fragment4。

我还有 4 个布局 tab1.xml tab2.xml tab3.xml tab4.xml 并且所有布局中有 4 个 webview 对象。

当我单击 Fragment1 时,它会打开 tab1.xml 并且 tab1.xml 的 webview1 打开 www.site.com 并且用户开始在 webview1 内冲浪。

如果用户在 webview1 中访问 2 个或更多页面,我希望该用户可以通过按钮返回。

我该怎么做?

【问题讨论】:

  • 您想在 webview 中返回一页还是从当前片段返回?
  • 我描述了,当访问者打开一个片段时,这个片段有一个网页视图。访问者可以在此 webview 中浏览,如果用户访问了超过 1 个页面,用户应该使用按钮或 androids 后退按钮返回上一个网页

标签: android android-intent android-fragments android-webview android-websettings


【解决方案1】:

在你的声明中:

WebView web = null;

在你的 onCreateView 中;

// Prepare WebView.
web = (WebView) v.findViewById(R.id.htmlDisplay);
// Set WebView.
final WebSettings webSettings = web.getSettings();

// Enable JavaScript.
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);

在您的后退按钮中(不是物理按钮):

web.goBack()

如果您想使用物理后退按钮:

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

【讨论】:

  • @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.tab1,container, false); webView = (WebView) ll.findViewById(R.id.webView1); webView.setWebViewClient(new WebViewClient()); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); if(webViewBundle==null){ webView.loadUrl("site.com"); }else{ webView.restoreState(webViewBundle); } return ll; }
  • 只是尝试,根据您的代码,将我放在答案中的最后一个覆盖(用于使用您的物理按钮)。用 webView 替换 web(以匹配您的 WebView 名称)。运行、导航、使用返回按钮。
  • 谢谢,我试过了,还是不行。正如我在第一篇文章中所写的那样,我有 4 个 webViews 和一个 Main Activity,我将 onKeyDown 函数放入 MainActivity 并在我的 Fragment1.java onCreateViews 内部创建 webView。但是当我点击物理后退按钮时,不幸的是App has stoppeg error。
  • 所以在 Fragment1.java 中添加一个按钮,在 webView 下方(上方,您可以使用的位置)。在 onClick 方法中,放入: webView.goBack();你应该完成了。 (删除之前添加到物理后退按钮的覆盖 - 它不会以这种方式工作)
  • 谢谢,它与 Fragment1.java 中的按钮一起使用。如果我在 optionsMenu 中放一个项目返回,是否可以到达 Fragment1 的 webView 元素并返回?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
相关资源
最近更新 更多