![](/img/trans.png)
[英]How do I go back within webview after navigation to a different fragment from the webview fragment?
[英]Back Navigation WebView with Fragment
我確實看過與讓后退按鈕與片段內的 WebView 一起工作有關的每個問題,但似乎無法使其在我的情況下工作。
我目前正在嘗試讓blackbelt回答工作,但我的應用程序在我按下后退按鈕后就會關閉。
任何幫助都會很棒,謝謝。
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();
}
}
它應該工作。 如果可以,不要忘記將消息傳遞給片段以返回
IE
if (!goback)
super.onBackPressed();
else
((FragmentShakira) view).goBack();
使用Nawrez 在這里發布的代碼。 以及如何在代碼中實現它。 在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 中,您可以通過將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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.