2015-09-04 3 views
0

Привет У меня есть фрагмент с WebView здесь:Android 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

Look @ Реализация назад навигации для WebView-х @ http://developer.android .com/training/implementation-navigation/temporal.html – Raghunandan

+0

вы не обрабатываете ключевое событие, то есть вверх или вниз, поэтому onkey() получает вызов дважды! –

+0

, так что вы можете написать мне код, пожалуйста? –

ответ

2

Вместо 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(); 
    } 
} 
+0

«webView.setOnKeyListener (новый View.OnKeyListener() { public boolean canGoBack() { return webView! = null && webView.canGoBack(); } public void goBack() { if (webView! = Null) { webView.goBack(); } } }); ' показать мне ошибку в View.OnKeyListener –

+0

У вас есть правильный экземпляр фрагмента? –

+0

конечно ... посмотрите на изображение: [link] (http://cineblog01.be/img.PNG) –

0

Исправьте меня, если я ошибаюсь, но вам даже не нужен keylistener на задней кнопке, чтобы вернуться, потому что он уже настроен для этого! Вот почему он будет возвращаться дважды: один раз по характеру кнопки один раз из-за вашего actionlistener

+0

, так что вы можете написать мне правильный код, пожалуйста? –

+0

просто удалите часть 'webView.setOnKeyListener (новый View.OnKeyListener() { public boolean onKey (просмотр v, int keyCode, событие KeyEvent) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); возвращающие; } возвращают ложь; } }); 'изменение –

+0

ничего ... это тот же самый код –

Смежные вопросы