繁体   English   中英

从webview片段导航到不同的片段后,如何在webview中返回?

[英]How do I go back within webview after navigation to a different fragment from the webview fragment?

在离开WebView fragment后,我一直想找到一种在WebView返回的方法。 困境如下:

  1. 我加载WebView fragment page1.html
  2. 然后我在其中导航,例如page1.html?navigate=page2.html
  3. 然后,我导航到不同的Fragment上的某些事件的点击WebView fragment ,说我点击,在带来了一个符号"NotAwebviewfragment.java"
  4. 然后我从notawebviewfragment单击回来然后它转到我离开的WebView page 但是,当我再次单击它时,它会转到之前在WebView之前打开的Fragment
  5. 现在如果我留在WebViewFragment我可以根据需要来回导航。 但是,一旦我离开它,它只允许我访问WebView一次。

这是迄今为止的代码:在webview中:

public boolean webViewSteppedBack() {       
        if (webview != null && webview.canGoBack()) {   
            webview.goBack();
            return true;
        }
        return false;
    }

public boolean backPressed(final MainActivity mainActivity) {
    if (webViewSteppedBack()) {
         if(!EikonUtils.isTablet(getActivity())) {
            getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
          }
            return true;
     }
     return false;
}

MainActivity (包含后面的片段导航代码):


    @Override
    public void onBackPressed() {
    final FragmentManager manager = getSupportFragmentManager();
    Fragment topFragment = FragmentStackManager.getInstance().getTopFragment();
if (backPressListener != null) { boolean b = false;
 //Making sure we trigger the backPressed event if the listener is the top fragment String bplTag = ((Fragment) backPressListener).getTag();
 String topFragemtnTag = "";

 if (topFragment != null) {
 topFragemtnTag = topFragment.getTag();
 if (bplTag != null && topFragemtnTag != null && bplTag.equals(topFragemtnTag)) { 
 b = backPressListener.backPressed(this);

} 

} if (b) { return; } 

 if (!NotAWebViewFragment.TAG_NOT.equals(bplTag)) {
 backPressListener = null;
 } 

 }
}

您需要在定义webView的片段中覆盖此方法。

webView.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                switch (keyCode) {
                    case KeyEvent.KEYCODE_BACK:
                        if (mWebView.canGoBack()) {
                            mWebView.goBack();
                            return true;
                        }

                }
            }
        }
        return false;
    }
});

您可以将所有片段添加到后台堆栈 在activity的onBackPressed方法中,您可以获取当前活动的片段。 您可以检查活动片段是否是Awebviewfragment的实例,如果webview可以导航回来,否则使用片段管理器的popBackStack ()方法从堆栈中弹出当前活动片段。 以下是代码段:1。添加片段

private void addNotAwebviewfragment(){supportFragmentManager.beginTransaction(); FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction(); notAwebviewfragment = NotAwebviewfragment.newInstance(“test”,“test”);

    fragmentTransaction.add(R.id.contents, notAwebviewfragment, NotAwebviewfragment.TAG_NOT).addToBackStack(NotAwebviewfragment.TAG_NOT);
    fragmentTransaction.commit();
}

private void addFragWebview(){
    FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
    webViewFragment = Awebviewfragment.newInstance("test", "test");
    webViewFragment.setFragmentListener(weblistener);
    backPressListener = webViewFragment;
    fragmentTransaction.add(R.id.contents, webViewFragment, Awebviewfragment.TAG).addToBackStack(Awebviewfragment.TAG);
    fragmentTransaction.commit();
}
  1. 在主活动中的onBackPRessed()中:@Override public void onBackPressed(){

     Fragment fragment = getActiveFragment(); if(fragment instanceof Awebviewfragment){ System.out.println("web view fragment"); if(backPressListener != null && backPressListener.backPressed(this)){ System.out.println("web view fragment will return"); return; } } int count = supportFragmentManager.getBackStackEntryCount(); if (count > 0 ){ supportFragmentManager.popBackStackImmediate(); }else { super.onBackPressed(); } 

    }

  2. get active fragment:public Fragment getActiveFragment(){if(supportFragmentManager.getBackStackEntryCount()== 0){return null; } String tag = supportFragmentManager.getBackStackEntryAt(supportFragmentManager.getBackStackEntryCount() - 1).getName(); return supportFragmentManager.findFragmentByTag(tag); }

你可以检查github中提交的样本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM