Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带片段的反向导航WebView_Android_Webview_Android Webview - Fatal编程技术网

Android 带片段的反向导航WebView

Android 带片段的反向导航WebView,android,webview,android-webview,Android,Webview,Android Webview,我已经仔细研究了每一个与“后退”按钮在片段中使用WebView有关的问题,但在我的例子中,似乎无法使其正常工作 我目前正在尝试获取工作的答案,但我的应用程序只在按下后退按钮后关闭 任何帮助都会很好,谢谢 public class MainActivity extends BaseActivity { private Fragment FragmentArchietecture = new FragmentShakira(); WebView webview; private Fragmen

我已经仔细研究了每一个与“后退”按钮在片段中使用WebView有关的问题,但在我的例子中,似乎无法使其正常工作

我目前正在尝试获取工作的答案,但我的应用程序只在按下后退按钮后关闭

任何帮助都会很好,谢谢

public class MainActivity extends BaseActivity {

private Fragment FragmentArchietecture = new FragmentShakira();

WebView webview;

private Fragment mContent;

public MainActivity() {
    super(R.string.app_name);

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null)
        mContent = getSupportFragmentManager().getFragment(
                savedInstanceState, "mContent");
    if (mContent == null)
        mContent = new FragmentShakira();

    setContentView(R.layout.content_frame);
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, FragmentArchietecture, "webby")
            .commit();

    setBehindContentView(R.layout.menu_frame);
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.menu_frame, new RandomList()).commit();

    ActionBar bar = getSupportActionBar();
    bar.setTitle(R.string.app_name);

    getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    setSlidingActionBarEnabled(true);

}

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

 }
片段:

public class FragmentShakira extends SherlockFragment {

static WebView webview;
String TAG = "webby";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater
            .inflate(R.layout.fragmentwebview, container, false);

    WebView webview = (WebView) view.findViewById(R.id.webView1);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.setWebViewClient(new WebViewClient());
    webview.loadUrl("https://www.google.co.uk/");

    return view;

}

public boolean canGoBack() {
    return webview != null && webview.canGoBack();
}

}

它应该会起作用。如果可能的话,不要忘记将消息传递给要返回的片段

使用由发布的代码。 下面是如何在代码中实现它。 在
onCreateView()方法中添加以下内容:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater
            .inflate(R.layout.fragmentwebview, container, false);

    WebView webview = (WebView) view.findViewById(R.id.webView1);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.setWebViewClient(new WebViewClient());
    webview.loadUrl("https://www.google.co.uk/");

    //handles the back navigation in the fragment
    webView.canGoBack();
    webView.setOnKeyListener(new View.OnKeyListener() {

        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK
                    && event.getAction() == MotionEvent.ACTION_UP
                    && webView.canGoBack()) {
                webView.goBack();
                return true;
            }
            return false;
        }
    });  // until here

    return view;

}

在Kotlin中,您可以通过添加到WebView来轻松处理此问题

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val myWebView: WebView = view.findViewById(R.id.your_webView)
    myWebView.webViewClient = WebViewClient()
    myWebView.loadUrl("https://www.google.com/")
    myWebView.setOnKeyListener { v, keyCode, event ->
        if (keyCode == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) {
            myWebView.goBack() // Navigate back to previous web page if there is one
            nested_scroll.scrollTo(0, 0) // Scroll webview back to top of previous page
        }
        true
    }
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val myWebView: WebView = view.findViewById(R.id.your_webView)
    myWebView.webViewClient = WebViewClient()
    myWebView.loadUrl("https://www.google.com/")
    myWebView.setOnKeyListener { v, keyCode, event ->
        if (keyCode == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) {
            myWebView.goBack() // Navigate back to previous web page if there is one
            nested_scroll.scrollTo(0, 0) // Scroll webview back to top of previous page
        }
        true
    }
}