如何加上"进入返回]在web视图里面的片段的功能?视图、片段、里面、功能

2023-09-12 22:04:19 作者:學不會丶遺忘

更新:解决了!问题是关系到我Viewpager没有的WebView。

我想添加一个返回功能,我的的WebView 这是一个片段里面。但我无法弄清楚如何:

I'm trying to add a "Go Back" function to my WebView which is inside a Fragment. But I can't figure out how to:

public final class TestFragment extends Fragment {

    static WebView mWeb;
    private View mContentView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {   
        mContentView = inflater.inflate(R.layout.webview, null);
        mWeb = (WebView)mContentView.findViewById(R.id.webview);

        WebSettings settings = mWeb.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setSupportZoom(false);
        mWeb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        mWeb.getSettings().setBuiltInZoomControls(false);
        mWeb.loadUrl("myurl...");
        mWeb.setOnKeyListener(new OnKeyListener(){
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((keyCode == KeyEvent.KEYCODE_BACK) && mWeb.canGoBack()) {
                    mWeb.goBack();
                    return true;
                }
                return false;
            }
        });
    }   
}

我也试过这样的:

I also tried something like:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWeb.canGoBack()) {
        mWeb.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

另一种解决方案,但同样的问题:

Another solution but same problem:

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

任何想法如何得到这个工作?

Any ideas how to get this working?

推荐答案

其实你不能直接在片段里做。该 onBack pressed 可以在 FragmentActivity 覆盖。你可以做的是:

Actually you can not do directly inside the fragment. The onBackPressed can be overridden in the FragmentActivity. What you can do is:

重写 onBack pressed 的活动中。 当 onBack pressed 被调用,检查当前片段的实例显示了实例的WebView 。 如果是,请片段如果的WebView 可以回去了。 如果不是的话,叫或任何你需要 Override the onBackPressed inside the activity. When the onBackPressed is called, check if the instance of the current fragment is the instance showing the webview. If it is, ask the fragment if the webview can go back. if it is not, call the super or whatever you need

编辑:

 @Override
 public void onBackPressed() {
       Fragment webview = getSupportFragmentManager().findFragmentByTag("webview");
       if (webview instanceof MyWebViewFragment) {
              boolean goback = ((MyWebViewFragment)webview).canGoBack();
              if (!goback)
                super.onBackPressed();
       }
 }