Android 如何转到Webview中存在于片段中的上一页?

Android 如何转到Webview中存在于片段中的上一页?,android,android-fragments,webview,searchbar,onbackpressed,Android,Android Fragments,Webview,Searchbar,Onbackpressed,我有一个活动叫做搜索活动。它有一个搜索栏和4个带有网络视图的选项卡。当我输入文本并单击搜索时,所有选项卡都加载了我传递给它们的相应URL。但是,当我单击“上一步”按钮时,我希望所有的网络视图返回到上一页,而不是活动关闭。我已经尝试了下面的代码,但不起作用。这是搜索活动的代码 public boolean onKeyDown(int keyCode, KeyEvent event) { int count = getFragmentManager().getBackStackEntryC

我有一个活动叫做搜索活动。它有一个搜索栏和4个带有网络视图的选项卡。当我输入文本并单击搜索时,所有选项卡都加载了我传递给它们的相应URL。但是,当我单击“上一步”按钮时,我希望所有的网络视图返回到上一页,而不是活动关闭。我已经尝试了下面的代码,但不起作用。这是搜索活动的代码

public boolean onKeyDown(int keyCode, KeyEvent event) {

    int count = getFragmentManager().getBackStackEntryCount();

    if (count != 0 && (keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        webView.goBack();
        getFragmentManager().popBackStack();
        //additional code
    } else {
        super.onBackPressed();
    }
    return super.onKeyDown(keyCode, event);
}

1.在
SearchActivity
上添加一个接口,并在
MyFragment
上实现该接口,以在
SearchActivity
MyFragment
之间进行通信

2.覆盖
onBackPressed()
方法,在按下后退按钮时添加自定义函数,并检查片段的
WebView
是否可以通过
goBack
侦听器返回。如果你能回去,那就回去吧。如果不能,请调用
super.onBackPressed()

SearchActivity.java

public class SearchActivity extends AppCompatActivity{

public interface goBack{
    boolean canGoBack();
}

@Override
public void onBackPressed() {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
   //fragment_container is a layout where fragment is populated

    if (fragment instanceof goBack && fragment.canGoBack()) {
        return;
    }
    super.onBackPressed();

}
}
MyFragment.java

public class MyFragment extends Fragment implements SearchActivity.goBack{
@Override
public boolean canGoBack() {
    if (webView.canGoBack()) {

        webView.goBack();
        return true;
    }
    return false;
}

我会使用一个界面:

Public Interface InterfaceBackPressed {
    onInterfaceBackPressed();
}
public class MyFragment extends Fragment implements IOnBackPressed{
   @Override
   public void onInterfaceBackPressed() {
       if (webView.canGoBack()) {

            webView.goBack(); 
        } else {
        super.onInterfaceBackPressed();
        }
    }
}
然后在您的活动中:

public class SearchActivity extends Activity {
...
    @Override public void onBackPressed() {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container);
       if (!(fragment instanceof InterfaceBackPressed) || !((InterfaceBackPressed) fragment).onBackPressed()) {
          super.onInterfaceBackPressed();
       }
    } 
}
并让每个片段实现您的接口:

Public Interface InterfaceBackPressed {
    onInterfaceBackPressed();
}
public class MyFragment extends Fragment implements IOnBackPressed{
   @Override
   public void onInterfaceBackPressed() {
       if (webView.canGoBack()) {

            webView.goBack(); 
        } else {
        super.onInterfaceBackPressed();
        }
    }
}

看看这个,我也用过那个。无效。您尚未在片段中添加onBackPressed()的回调。请遵循此链接并将onBackPressed实现到片段中,片段中存在
Webview
。如何从活动中访问它?什么是
fragment\u container
?请参阅提到
fragment\u container
的注释。它是一个布局(如
FrameLayout
)id,其中填充了片段