당겨서 새로고침 구현

  • Swiperefreshlayout 의존성 추가

앱 수준의 build.gradle 파일에 의존성 프로젝트 추가

implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'


  • Swiperefreshlayout xml 추가


<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    ...>

    <WebView>

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>


  • 리프레시 event 정의


// 리프레시 레이아웃 선언
private val refreshLayout: SwiperefreshLayout by lazy{
    binding.refreshLayout
}

private fun bindViews(){
    refreshLayout.setOnRefreshListener{ // 리프레시 event 설정 
        //TODO(), 웹뷰를 새로고침
        webView.reload()
    }
}


  • 리프레시 후 isRefreshing 값 변경, 웹뷰 클라이언트 상속


// 웹 로딩에 관한 메서드들 정의
// inner class 주의! 상위 클래스의 맴버에 접근 할 수 있음!!
inner class WebViewClient: android.webkit.WebViewClient(){ 

    // 웹 로딩이 시작되면
    override fun onPageStarted(view:WebView?, url:String?, favicon:Bitmap?){
        super.onPageStarted(view, url, favicon)
        // progressBar.show()
    }

    // 웹 로딩이 끝나면  isRefreshing 완료
    override fun onPageFinished(view:WebView?, url:String?){ 
        super.onPageFinished(view, url)

        refreshLayout.isRefreshing = false
        // progressBar.hide()   // 웹 뷰 로딩 프로그래스 바 숨기기
        // goBackButton.isEnable = webView.canGoBack() // 뒤로가기가 가능할 때만 버튼 활성화
        // goForwardButton.isEnable = webView.canGoForward() // 앞으로가기가 가능할 때만 버튼 활성화
        // addressBar.setText(url)  // 실제 로딩된 url을 주소창에 띄우기
    }

}


  • 로딩 프로그레스바 선언, 웹크롬 클라이언트 상속


// xml에 ContentLoadingProgressBar 생성 후 선언
private val progressBar: ContentLoadingProgressBar by lazy{binding.progressBar}

// 웹뷰 클라이언트는 브라우저 차원에서 웹 이벤트 관한 메서드 정의
// inner class 주의! 상위 클래스의 맴버에 접근 할 수 있음!!
inner class WebChomeClient: android.webkit.WebChromeClient(){
    override fun onProgressChanged(view:WebView?, newProgress:Int){ // 로딩 정도가 변경되면 실행됨(0~100)
        super.onProgressChanged(view, newProgress)

        progressBar.progress = newProgress
    }
}

webView.webChromeClient = WebChomeClient()