【问题标题】:Back Navigation WebView with Fragment带片段的返回导航 WebView
【发布时间】:2014-04-18 16:16:57
【问题描述】:

我从字面上研究了与让后退按钮与片段内的 WebView 一起工作的每个问题,但似乎无法使其在我的情况下工作。

我目前正在尝试让blackbelt's 回答工作,但我的应用程序只会在我按下后退按钮后关闭。

任何帮助都会很棒,谢谢。

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

}

【问题讨论】:

    标签: android webview android-webview


    【解决方案1】:

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

    if (!goback)
         super.onBackPressed();
    else
         ((FragmentShakira) view).goBack();
    

    【讨论】:

      【解决方案2】:

      使用Nawrez here 发布的代码。 以及如何在代码中实现它。 在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;
      
      }
      

      【讨论】:

        【解决方案3】:

        在 Kotlin 中,您可以通过将 setOnKeyListener 添加到 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
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-10-24
          • 2019-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-20
          • 2022-08-13
          相关资源
          最近更新 更多