Android 如何转到Webview中存在于片段中的上一页?
我有一个活动叫做搜索活动。它有一个搜索栏和4个带有网络视图的选项卡。当我输入文本并单击搜索时,所有选项卡都加载了我传递给它们的相应URL。但是,当我单击“上一步”按钮时,我希望所有的网络视图返回到上一页,而不是活动关闭。我已经尝试了下面的代码,但不起作用。这是搜索活动的代码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
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,其中填充了片段