마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

웹뷰 뒤로가기 문제하나 질문드립니다.

0 추천

웹뷰로 뒤로가기를 구현했습니다.

완벽하게 구현되었는줄 알고 넋놓고 있다가 뒤통수 맞았네요.ㅜㅜ

문제가 발생했습니다.

첫번째 페이지에 a, b, c, d... 등 이렇게 링크가 쭉 있습니다.

여기서 b를 클릭해서 해당페이지로 넘어간 후에 뒤로가기 버튼으로 다시 첫번째 페이지로 돌아오면,

방금 클릭해서 넘어갔던 b 링크가 클릭되지 않습니다.

b가 아닌 다른 a, c, d...등을 클릭하면 해당 페이지로 넘어갑니다.

다시 뒤로가기로 돌아와서 방금 클릭했던 링크를 클릭하면 링크가 안먹습니다.

대신 다른 링크들은 정상적으로 동작하구요.

한마디로 뒤로가기로 돌아오면 방금 방문했던 페이지만 링크가 동작하지 않습니다.

 

소스는 아래와 같습니다. 도대체 이유가 뭘까요?

public class MainActivity extends AppCompatActivity
{
    WebView webView;
    String mCurrentUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mCurrentUrl = null;

        webView = (WebView) findViewById(R.id.webView);
        webView.setWebViewClient(new MyWebViewClient());
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        
        webView.loadUrl("http://m.naver.com");
       
    }

    private class MyWebViewClient extends WebViewClient
    {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            if(mCurrentUrl != null && url != null && url.equals(mCurrentUrl)) {
                webView.goBack();
            } else {
                view.loadUrl(url);
                mCurrentUrl = url;
            }

            return true;
        }

        
    }

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

        return super.onKeyDown(keyCode, event);
    }
}

 

사이타마 (1,090 포인트) 님이 2016년 7월 5일 질문

1개의 답변

0 추천
 
채택된 답변
페이지는 홈으로 넘어왔는데, url은 전 페이지의 것이 그대로 있을 것 같네요.

같은 url일 경우 로딩하지 않으니, 논리적인 버그 같습니다.
김조조 (5,540 포인트) 님이 2016년 7월 5일 답변
사이타마님이 2016년 7월 5일 채택됨
고민하다가 url을 비교하는 부분에서 문제가 있는걸 찾고 완료하러 왔는데 답변을 주셨네요. 감사합니다^^;
...