android : backキー(戻るボタン)が動かない

kishidaです。別Activityから使用したwebviewで戻るボタンを扱った際にハマりました。

いろんなサイトを参考しながら始めに書いたソースがこんな感じです。

public class MainActivity extends Activity {
  private WebView webview;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /*****省略*****/
  }

  @Override
  public boolean onKeyDown( int keyCode, KeyEvent event ) {
    if ( event.getAction() == KeyEvent.ACTION_DOWN
&& keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack() == true){
      webview.goBack();
      return true;
    }
    return super.onKeyDown( keyCode, event );
  }
}

実行してみると一つ問題が。
Activity_A -> Activity_B(webview起動)、ページ1表示 -> ページ2 -> ページ3
ここまで実行した後backキーを押していくと、ページ2までしか戻らずそれ以上押しても何も起こりませんでした。

どうも2番めに起動したページまでしか戻らないみたいです。

で、いろいろ試してとりあえずは動かせるようになりました。

public class MainActivity extends Activity {
  private WebView webview;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /*****省略*****/
    _webview();
  }

//WebViewの設定、読み込み
  public void _webview(){
    /*****省略*****/
  }
  @Override
  public boolean onKeyDown( int keyCode, KeyEvent event ) {
    if ( event.getAction() == KeyEvent.ACTION_DOWN
&& keyCode == KeyEvent.KEYCODE_BACK){
      if(webview.canGoBack() == true ) {
        if(webview.copyBackForwardList().getCurrentIndex() == 1){
          _webview();
          return true;
        }
      webview.goBack();
      return true;
    }else{
    }
  }
  return super.onKeyDown( keyCode, event );
}

webview.copyBackForwardList().getCurrentIndex() で現在のページを調べて2番めのページならwevviewを再起動する感じにしました。

正直無駄が多いとは思うんですがいい方法が見つかるまでは我慢。

カテゴリー: Android

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*