你好,我在这里有一个带有webview的片段:
public class ListaCanali extends Fragment {
TextView textView;
WebView webView;
ProgressBar progressBar;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.lista_canali,container,false);
//Titolo Fragment
((MainActivity) getActivity()).setActionBarTitle("Ultimi Film Pubblicati");
//FindViewById
webView = (WebView) v.findViewById(R.id.webview);
textView = (TextView) v.findViewById(R.id.textView);
progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
//Impostazioni WebView
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadsImagesAutomatically(true);
webView.loadUrl("http://testoetraduzione.org");
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setAppCacheEnabled(false);
webView.setWebViewClient(new WebClient());
//Tasto Indietro
webView.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return false;
}
});
return v;
}
为什么当我按下后退按钮时,webview会返回两次!请给我一个正确的代码!当然我评价最好
答案 0 :(得分:3)
而不是setOnKeyListener
上的WebView
,而是覆盖活动的onKeyDown
方法。你必须处理好片段生命周期,否则它会导致崩溃。
在您的活动中获取片段的实例:
// Fragment f = instance of your fragment
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && f != null && f.canGoBack()) {
f.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
并在片段中添加这些方法:
public boolean canGoBack() {
return webView != null &&webView.canGoBack();
}
public void goBack() {
if(webView != null) {
webView.goBack();
}
}
答案 1 :(得分:0)
如果我错了,请纠正我,但你甚至不需要在后退按钮上返回键盘,因为它已经配置好了!这就是为什么它会回归两次:一次是按钮的性质,一次是因为你的动作玩家