* 출처
: https://aggapple.tistory.com/14
: https://lovemewithoutall.github.io/it/android-webview-history/
: https://kutar37.tistory.com/entry/Android-webView-뒤로가기-제어
[android]WebView history stack & back
WebView 사용 시 history가 누적되었을 경우,
Back을 눌렀을 때 WebView가 띄워진 Activity를 바로 종료하지 않고
WebView의 첫 화면으로 돌아간 후 다시 Back을 누르면 Activity를 종료(Back의 원래 기능).
해당 기능 구현을 위해 onBackPressed를 Override.
Android WebView Back & Forward 버튼으로 도달할 URL 확인
Android에서 WebView로 앱을 개발하다보면 Back 버튼과 Forward 버튼이 신경쓰인다. 이 버튼들을 눌렀을 때 도달할 URL이 민감한(?) 화면일 수 있기 때문. 그래서 URL을 확인할 수 있는 방법을 정리해보았다.
import android.webkit.WebView;
import android.webkit.WebBackForwardList;
// WebView
WebView wv = (WebView) findViewById(R.id.webview);
// history list
WebBackForwardList historyList = wv.copyBackForwardList();
// Back button URL
String backTargetUrl = historyList.getItemAtIndex(historyList.getCurrentIndex() - 1).getUrl();
// Forward button URL
String forwardTargetUrl = historyList.getItemAtIndex(historyList.getCurrentIndex() + 1).getUrl();
위 API를 사용하여 얻은 URL을 기준으로 필요한 로직을 구현하면 될 것이다.
끝!
참고
Android : webView 뒤로가기 제어
...
HOME
1 2 3 4 5 6 7 8 9 10 | @Override public void onBackPressed() { if (webView.getOriginalUrl().equalsIgnoreCase(URL)) { super.onBackPressed(); }else if(webView.canGoBack()){ webView.goBack(); }else{ super.onBackPressed(); } } | cs |
위의 equalsIgnoreCase() 는 equals()와 비슷하지만 대소문자를 무시하고 비교해 준다.
...
추가:
앱을 운영중 자꾸 이 부분에서 nullPointerException이 발생해서 webView에 if(webView!=null) 조건을 달아주었는데,
패치 후 테스트하다 보니 webView의 문제가 아니라 getOriginalUrl()에서 null이 리턴된다.
아래와 같은 글을 찾았다.
"
public String getUrl ()
gets the URL for the current page. This is not always the same as the URL passed to WebViewClient.onPageStarted because although the load for that URL has begun, the current page may not have changed." (c) Android Developers
그래서 onPageFinished 메소드를 오버라이드해서 해결했다.
테스트하는 기기들이 빨라서 미처 몰랐다 ...
'IT_Programming > Android_Java' 카테고리의 다른 글
[펌] RecyclerView에서 텍스트 레이아웃 미리 계산하기 (0) | 2018.08.07 |
---|---|
[펌] RecyclerView 에서 notifyItemChanged()의 payload 이해하기 (0) | 2018.08.01 |
FullScreen DialogFragment 의 내용이 상태바에 가려지는 증상 - Display DialogFragment content below status bar (0) | 2018.07.19 |
[펌] Android App Bundle 소개 (0) | 2018.07.13 |
[펌] 구글 플레이 앱 서명 시 알아야 할 몇 가지 (0) | 2017.12.27 |