2011-06-27 2 views
1

J'ai un WebViewClient dans une activité dans laquelle je substituez la méthode de onKeyDown comme celui-cihistoire de WebViewClient tort sur HoneyComb

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
     webView.goBack(); 
     return true; 
    } else { 
     finish(); 
     return true; 
    } 
} 

Cela fonctionne comme un charme sur mon téléphone, ainsi que les émulateurs que j'ai testé sur l'inclusion d'un 3.0 émulateur.

Chose étrange est que sur un émulateur 3.1 ainsi que sur ma tablette Xoom (3.0.1), il ne fonctionne pas. Il semble que webView.canGoBack() renvoie toujours vrai sur ces plateformes.

Questions:

Quelqu'un at-il trouvé autre comportement similaire?

Avez-vous une solution de contournement/piratage qui me permet de faire fonctionner le bouton de retour pour naviguer dans l'historique de la vue Web, et éventuellement sortir de l'activité si nécessaire?

Mise à jour: J'ai depuis lors, changer l'application d'utiliser des fragments avec la bibliothèque compatbility donc je me sers maintenant ceci:

webView.setOnKeyListener(
      new View.OnKeyListener() { 
       @Override 
       public boolean onKey(View view, int keyCode, KeyEvent keyEvent) { 
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
         webView.goBack(); 
         return true; 
        } else { 
         redirectHelper.finish(); 
         return true; 
        } 
       } 
      } 
    ); 

où redirect aide est essentiellement une enveloppe pour la finition correcte d'une activité ou la suppression d'un fragment de la pile. J'ai toujours le même problème ..

Répondre

0

Je l'utilise sans problème sur les versions 3.1 et Galaxy Tab 10.1. N'a pas essayé la méthode onKeyDown.

@Override 
public void onBackPressed() { 
    if(webView.canGoBack()) { 
     webView.goBack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
+0

J'ai depuis déplacé des fragments et ne peux donc plus le tester. D'après ce que je peux dire, cela équivaut à ce que c'est. –