Android WebView Swipe Refresh

Merhaba arkadaşlar,
Bu dersimizde anlatım olarak uzun tutmayacağım soru cevap kısmındada sıklıkla sorulan webview e nasıl pull to refresh(WebView Swipe Refresh) özelliği kazandırırız onu göstereceğiz.

Kaynak kodu indirip kendi url inizi ekleyerek de kullanabilirsiniz.

Yapmanız gereken adımlar ; layout kısmında SwipeRefreshLayout ile birlikte WebView kullanıyoruz.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.mobilhanem.refreshwebviewexample.MainActivity">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <WebView
                android:id="@+id/webView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentEnd="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true" />

        </android.support.v4.widget.NestedScrollView>


    </android.support.v4.widget.SwipeRefreshLayout>



</RelativeLayout>

Ana sınıfımızda ise uygulamamızı çalıştırdıktan sonra ekranı aşağı doğru çekip bıraktığımız an sitemizi yeniliyoruz. Uygulamayı ilk açtığımızda direk beyaz ekran gelip urlnin yüklenmesini beklemek yerine kullanıcıya dialog göstererek beklemesini belirtmek istiyorsak da MyWebViewClient methodunu kullanıyoruz kaynak kodlara baktığımızda o kısmın commente alındığını göreceksiniz. onRefresh methodunda setRefreshing methodunu false yapmayı unutmuyoruz yoksa sürekli yeniliyormuş gibi yukarıda yenilenme dialogu etkin kalacaktır.

MainActivity.java

package com.mobilhanem.refreshwebviewexample;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView webView;
    private SwipeRefreshLayout mySwipeRefreshLayout;
    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mySwipeRefreshLayout = (SwipeRefreshLayout)this.findViewById(R.id.swipeContainer);
        String url ="https://www.mobilhanem.com";
        webView =(WebView) findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);

        webView.setWebViewClient(new WebViewClient());
        //webView.setWebViewClient(new MyWebViewClient());

        webView.loadUrl(url);

        mySwipeRefreshLayout.setOnRefreshListener(
                new SwipeRefreshLayout.OnRefreshListener() {
                    @Override
                    public void onRefresh() {
                        webView.reload();
                        mySwipeRefreshLayout.setRefreshing(false);
                    }
                }
        );
    }


    private class MyWebViewClient extends WebViewClient {

        @SuppressWarnings("deprecation")
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setMessage("Lütfen Bekleyin ...");
            progressDialog.show();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if(progressDialog!=null){
                progressDialog.dismiss();
            }
        }
    }
}

not:  Kullandığımız support-design kütüphanesinede dikkat edelim eğer build.gradle kısmında set etmezsek SwipeRefreshLayout özelliğini kullanamayacağız.

Mobilhanem.com üzerinden anlattığımız mobil uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

3

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

6 Yorum

  • Merhaba Alper bey, denedim ama ya ben yapamadim, yada bu cozumler etkili olmadi. Ama sorunu farkli bir sekilde halletim. Soru cevap kisminda bir sorum vardi orada verilen cevaplar yardimiyla suanda uygulamam sorunsuz sekilde calisiyor.

  • Tekrardan merhaba, sorunuzun çözülmesine sevindim çözüm yolunu buraya da paylaşırsanız aynı sıkıntıyı yaşayan veya yaşayacak olan kişilerde bilgilenmiş olur

  • Merhaba hocam.
    Hazırladığım web sitesi VR görüntü için WebGl kullanıyor. WebGl kullanımını android webview’de nasıl belirtmem lazım, yada belirtmem lazım mı? Çünkü simülatörde ve apk’yi test ettiğimde “Error. WebGl not supported.” hatası veriyor. Yardımınız için şimdiden teşekkür ederim…

  • Merhabalar öncelikle çok güzel bir makale ve video olmuş ellerinize sağlık bende web sitem için webview bir uygulama yapıyorum. Ancak ben kotlin üzerinden yapıyorum ve bu olayı kotlin dilin de bir türlü bulamadım acaba yardımcı olabilir misiniz?

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?