Giter Site home page Giter Site logo

samedovzaur / androidn Goto Github PK

View Code? Open in Web Editor NEW

This project forked from envercelik/anroidnotlari

0.0 0.0 0.0 1.3 MB

2020 Mobil programlama dersine ait, açıklamalar ile birlikte tüm uygulamalar, ödevler ve notlar

Home Page: HomePage

Java 100.00%

androidn's Introduction

Android Ders Notları

2020 Mobil programlama dersine ait, tüm uygulamalar, ödevler ve notlar

Ders Notu Uygulama Ödev
Hafta 1 Ders uygulamalarına ait tüm kodlar
Hafta 2 FirstApplication Calculator
Hafta 3 SecondApplication -
Hafta 4 LayoutTypes Layouts
Hafta 5 IntendApplication Intend
Hafta 6 CallApplication Permission
Hafta 7 LoginApplication SQLite
Hafta 8 GoogleMap GoogleMaps
Hafta 9 JSONApplication JSON
Hafta 10 JSOUPApplication JSOUP
Hafta 11 AsyncTaskApplication AsyncTask
Hafta 12 FragmentApplication1
FragmentApplication2
-
Hafta 13 FragmentApplication3
FragmentApplication4
FragmentApplication5
Fragment
eklenecek eklenecek -

Hafta 1


Android Nedir

  • Andorid, linux çekirdeği üzerine geliştirilmiş açık kaynak kodlu işletim sistemidir.

  • Mobil (taşınabilir) cihazlar hedeflenmiştir.

  • Google ve Open Handset Alliance birliği tarafından geliştirilmektedir.


Android'in Mimari Yapısı

2000px-Android-System-Architecture-svg.png

Applications :

Kullanıcı ile etkileşim sağlanan katmandır. Bildiğimiz, kullandığımız uygulamalar bu katmanda yer alır. Örneğin instagram,whatsapp,browser...

Application Framework :

Bir üst katmandaki uygulamalarımızın çalışması için gerekli kütüphaneler topluluğudur. Uygulamalarımızı geliştirmek için bu kütüphanleri kullanırız.

Libraries :

C ile yazılmış sistem kütüphanleridir. Örneğin SQLite local bir veritabanı oluşturma imkanı tanır. Opengl/es grafik işlemleri için gerekli kütüphanedir.

Android Runtime :

Java ile yazılmış çekirdek kütüphaneler ve işletim sistemini donanımdan ayıran sanal makine bulunur.

Linux Kernel :

Android mimarisinin en alt katmanıdır. Donanım sürücüleri burada bulunur. Örneğin kamera sürücüsü , güç yönetimi...


Android'in Gelişimi

  • Android 1.0 (Apple Pie HTC Dream) : Kamera desteği , wi-fi,bluetooth,browser,alarmlı saat ,youtube ...

  • Android 1.1 (Banana Bread ) : Sistem hataları düzeltildi, api geliştirildi.

  • Android 1.5 (Cupcake) : Kamera kaydı, video gösterimi, Picasa,Widget'ları kişiselleştirebilme, animasyonlu ekran özellikleri...

  • Android 1.6 (Donut) : Ekran çözünürlüğünün yükseltilmesi , geliştrililmiş android market ,galeride çoklu silme...

  • Android 2.0-2.1 (Eclair) : html5,bluetooth 2.1 , sanal klavye , geliştirilmiş google maps , arayüz özelleştirme...

  • Android 2.2 (Froyo) : 720p ekran çözünürlüğü, usb bağlantı, wi-fi tarama , flash player 10.1 ...

  • Android 2.3 (Ginger bread) : Çoklu kamera ve çoklu dokunmatik desteği , video arama ...

  • Android 3.0 (Honey comb) : sadece tabletlere özel sürümümü (şuan hem telefonlara hem tabletlere uyumlu tek sürüm yayınlanıyor)

  • Android 4.0 (Ice cream sandwich) : Yüz tanıma fonksiyonları, NFC ile dosya paylaşımı...

  • Android 4.1 (Jelly bean) : Aynı anda iki uygulama açma , takılmadan kayan ekran, enerji verimliliği , performans...

  • Android 4.4 (Kitkat) : Görsel arayüzde bir çok değişiklik, ram optimizasyonu , Dalvik alternatifi ART sanal makinası...

  • Android 5.0 (Lollipop) :

  • Android 6.0 (Marshmallow) :

  • Android 7.0 (Naugat) :

  • Android 8.0 (Oreo) :

  • Android 9.0 (Pie) :

  • Android 10.0 (10) : 3 eylül 2019

  • Android 11.0 (11) : 8 eylül 2020

Not : Her android versiyonu bir api numarası ile gelir.

Not : Uygulama oluşturulurken minumum api belirlenir (sonradan değiştirilebilir). Uygulamamızı bu api numarasının altında android versiyonu yüklü telefonlar kullanamaz.

Not : Belirlediğimiz minumum api'den sonra gelen özellikleri kullanamayız. (Kullanabiliriz ama bir çok test yapmamız gerekir önceki verisyonlarda çalışıyor mu diye)


Bilinmesi Gerekenler

Xml

  • Android'te tasarım ve veri kaynağı olarak xml(extensible markup language) kullanılır.
  • Xml veri taşıma standardıdır.(farklı sistemler arasında ortak dil olarak kullanılır)
  • Aynı zamanda bir işaretleme,görüntüleme dilidir. (Android'te bu amaçla kullanılır)
  • Xml ile kendi etiketlerimizi (tag) oluşturabiliriz. (Android için kullanılan etiketler bu sayede tanımlanmıştır)
  • Her xml dosyasında sadece bir kök(root) eleman bulunabilir. Bu kök içerisinde aynı düzeyde elemanlar tanımlanabilir.

Java

  • Andorid'te tasarımlara işlev kazandırmak içim java pogramlama dili kullanılır. Alternatif : kotlin

xml ile java kodları arasındaki bağlantı R.java konfigürasyon dosyası üzerinden sağlanır.

Not : Java ile android uygulamalar geliştirebilmek için jdk(java development kit) ve android sdk(software developtment kit) sistemde kurulu olmalıdır.

Not : Bu dersin kapsamı dışında olan bir çok android uygulama geliştirme alternatifi bulunmaktadır.



Hafta 2

  • Kullanıcının gördüğü arayüzlere Activity denir. Bir class ın Activity olabilmesi için AppCompatActivity classını extend etmesi gerekir.
  • Her activity onCreate method undan çalışmaya başlar.
  • setContentView() methodu ile Activity nin hangi xml dosyası ile çalışacağı set edilir.
  • Android uygulamalarının 3 ana parçası bulunur. AndroidManifest.xml dosyası , java ve res klasörleridir.
  • AndroidManifest.xml : uygulamanın genel konfigürasyon dosyasıdır. İzinler,uygulama ikonu , Activityler, Intendler,tema vs ... burada tanımlıdır.
  • java klasörü : tüm java kodları burada bulunur.
  • res klasörü : görüntü,ses,uygulamanın kullandığı metinler,arayüz tasarımları , renk bilgileri... kısaca uyugulamanın kullandığı tüm kaynaklar buradadır.
  • res klasörü altında bulunan mipmap klasöründe aynı görüntünün faklı çözünürlükte 6 kopyası bulunur. Uygulamanın açıldığı ekranın çözünürlüğüne göre uygun olan otomatik olarak seçilir.
  • res klasörü altında bulunan values klasöründe uygulamanın metinsel verileri tutulur.
  • res klasörü altında bulunan layout klasöründe arayüz tasarımları bulunur.
  • java kodunda R sınıfı ile res klasörü arasında bağlantı kurulur.
  • Gradle uygulama geliştirme sürecini otomotize eden bir araçtır. Örneğin uygulamamızda kullanacağımız bir kütüphaneyi gradle a belirtir. Gradle otomotik olarak indirip uygulamaya dahil eder.
  • Ekranda görünen her nesne bir view nesnesidir. Bir view elamanına tıkladığımızda eğer varsa onClick methodu tetiklenir.
  • Intendler activiteler arası geçiş yapan ayrıca veri taşıyabilen nesnedir.


Hafta 3

  • View nesnelerine (TextView,EditText,Button...) setOnClickListener() methodu ile dinleyici bir sınıf set edebiliriz.
  • setOnClickListener() methodu parametre olarak View.OnClickListener interface'sini implemente eden bir sınıf alır.
  • View nesnesine tıklandığında bu sınıfa ait olan onClick methodu tıklanan view nesnesini parametre alarak çağrılır.
  • Kısaca view nesnesine tıklandığında dinleyici sınıfın onClick methodu çağrılır.

Bu örnekte dinleyici sınıf anonim olarak tanımlanmış

buttonComputeMass.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        
    }
});
  • Hocanın CalculatorActivity'de uyguladığı yöntem bundan faklı bir şey değil.Nesnelere dinleyici sınıf set etmek için setOnClickListener() methoduna this parametresi gönderiyor. This CalculatorActivity'i referans ediyor.CalculatorActivity'de View.OnClickListener interfacesini implemente eden bir sınıf olduğundan değişen bir şey olmuyor.


Hafta 4

  • Android cihaz üreten bir çok üretici firma olduğundan piyasada çok faklı çözünürlükte android cihazlar bulunmaktadır. Bu nedenle uygulama tasarımlarının responsive yani cihaz çözürlüğüne göre boyutlanması gerekir. Bu amaçla linearLayout, RelativLayout,FrameLayout,Constraintlayout... gibi bir çok layout çeşidi oluşturulmuştur. Tasarım amacına uygun olarak istenen layout çeşidi ile tasarım yapılabilir.

LinearLayout

  • Elemanlar yatay veya dikey olarak konumlanırlar.
  • Eğer orientation niteliğine vertical değeri verilirse dikey , horizontal değeri verilirse yatay olarak sıralanırlar.
  • Her satıra veya her stuna sadece bir eleman yerleşebilir.
  • Diğer bir önemli özelliği ise layout_weight'dir. Bu özellik ile elemanların kaplayacağı alan ağırlık olarak verilir. Örneğin yatay sıralanan bir linearLayout'ta 2 eleman olsun. 1.elmanın layout_weight değeri 1 olsun. 2.elemanın laout_weight değeri 2 olsun. Bu durumda ekran yatayda üçe eşit parçaya bölünür. Birince elemana 1 parça 2.elemana ise 2 parça verilir. Not : elemanların genişlik değeri 0dp olmalıdır. Not : Benzer mantık dikey linearLayout için de geçerlidir.

ConstraintLayout

  • Her eleman kendisine verilen constraint(sınır) değerlerine göre konumlandırılır.

RelativeLayout

  • Her eleman diğer bir elemana veya ekranın kenar ve köşelerine göre göreceli olarak konumlandırılır.

  • layout_above : Hangi görsel öğenin id’si verilmişse onun üstünde görünür

  • layout_below : Hangi görsel öğenin id’si verilmişse onun altında görünür

  • layout_toLeftOf : Hangi görsel öğenin id’si verilmişse onun solunda görünür

  • layout_toRightOf : Hangi görsel öğenin id’si verilmişse onun sağında görünür

  • android:layout_alignParentBottom: İçine koyulduğu layout’un en altına yerleşmesine yarar. (true-false)

  • layout_alignParentLeft: İçine koyulduğu layout’un en soluna yerleşmesine yarar. (true-false)

  • android:layout_alignParentRight: İçine koyulduğu layout’un en sağına yerleşmesine yarar. (true-false)

  • android:layout_alignParentTop : İçine koyulduğu layout’un en üstüne yerleşmesine yarar. (true-false)

  • ...

FrameLayout

  • Ekran 9 parçaya bölünür. Elemanların hangi parçaya yerleşeceği layout_gravity özelliği ile belirtilir. örneğin : layout_gravity = "bottom|right" özelliği elemanı 9.parçaya yerleştirir.

GridLayout

  • Ekran matris yapısı gibi hücrelere bölünür. Elemanlar kendilerine verilen satır ve stun numarasına göre konumlandırılır. örneğin : layout_column="0" layout_row="0" ile eleman 1. hücreye yerleştirilir.

TableLayout

  • Html'deki table yapısına benzerdir. Tabloya satır eklemek için <TableRow> etiketi , satırsaki elemanın ağırlığını belirlemek için ise layout_span özelliği kullanılır.


Hafta 5

Intend

  • Activity'ler arası geçiş
  • Activity'ler arası veri transferi
  • Broadcast Receiver çağırma
  • Service çağırma
  • Sistemde bulunan diğer uygulamaları çağırma (sms,browser,mail,sosyal medya...)
  • ... gibi amaçlar ile kullanılır.

Not : Her uygulama faklı özelliklere sahip olduğundan intend tipimiz ve intend'e set etiğimiz veriler , intendimizi karşılamasını istediğimiz uygulamaya uygun olmalıdır.

Intend ile başka bir activity'den veri alıp geri dönebiliriz

  • startActivityForResult() ile veri almak istediğimiz Activity'e geçiş yapılır.
  • Bu method gerekli intend ve request_code paramtrelerini alır.
  • request_code herhangi bir int sayıdır ve doğrulama amacıyla kullanılır.

  • setResult() ile veri aldığımız activity'den geri döneriz.
  • Bu method gerekli datayı set ettiğimiz intend ve sabit int bir değer (ör :RESULT_OK) paramtrelerini alır.

  • Gelen datayı karşılamak için onActivityResult() override edilir.
  • requestCode ve ResultCode parametreleri ile gelen datanın istekte bulunduğumuz data olup olmadığı kontrol edilir.
  • kontrol geçilirse data parametresi istekte bulunduğumuz datadır.


Hafta 6

Permissions

Api 23 (Marshmallow) öncesi tüm izinler uygulama indirilirken verilirdi. Api 23 ve sonrası için başlangıç izinleri yerine anlık izinlere geçildi.

İzin Algoritması

Örneğin uygulama kameraya erişmek istesin.

  • 1- Öncelikle izin kontrolu yapılır. (Kullanıcı bu uygulama için daha önceden kamera erişim izni vermiş mi ?)

  • 2- Platform kontrolü yapılır. (Api 23 öncesi mi sonrası mı ? - buna şuan(2020) gerek yok- yerine ActivityCompat geldi)

  • 3- Gerekli izin ile ilgili açıklama yapılır (isteğe bağlı)

  • 4- izin isteğide bulunulur

  • 5- izin isteğine verilen yanıt kontrol edilir. (izin verilmişse kameraya erişilir.)

  • 1- checkSelfPermission()

  • 2- if(Build.VERSION.SDK_INT >=23)

  • 3- shouldShowRequestPermissionRationale() --> Kullanıcının kafası karışıksa true döner - açıklama yaparız.
    Kafası karışık olma durumu :
    Uygulama ilk kez çalıştırılıyorsa false döner . (kullanıcının kafası karışık değil)
    Uygulama 2.kez veya daha fazla çalıştırılmışsa
    --> Eğer izne daha önceden olumsuz yanıt verilmiş ise ve bir daha sorma işaretlenmişse false döner . (Kafa karışık değil)
    --> Eğer izne daha önceden olumsuz yanıt verilmiş ise ve bir daha sorma işaretlenmemişse true döner (Kafa karışık -açıklama yaparız)

  • 4- requestPermissions() --> gerekli izinler dizi olarak verilir. Ayrıca doğrulama amaçlı reuest_code verilir.

  • 5-onRequestPermissionResult()--> verilen tüm izinleri bu method karşılar. Bu nedenle override edilmesi gerekir. Request code ile kullanıcının verdiği iznin istediğimiz izin olup olmadığı kontrol edilir.

Not : Anlık izinler sadece dangerous permission için gereklidir. Ör : kamera,konum,galeri…



Hafta 7

SQLite

  • SQLite local veritabanı oluşturmak için kullanılan kütüphanedir. Android mimrasine gömülü olarak geldiğinden ekstra olarak uygulamaya eklemeye gerek yoktur.

  • Local veritabanı : dışarıya açık olmayan , verilerin cihaz hafızasında tutulduğu , uygulamaya özel olan veritabandır.

  • Bir SQLite veri tabanı oluşturmak için SQLiteOpenHelper soyut sınıfını miras alıp ihtiyacımıza uygun olarak özelleştiririz.

  • Veritabanının adı bu sınıfın Constructor'ına verilir.

  • onCreate() methodu sadece uygulama yüklenirken bir kere çalıştırılan methoddur. Bu nedenle ihtiacımız olan tabloları bu method içerisinde oluştururuz.

  • Tablo oluşturma, tabloya eleman ekleme ,silme,güncelleme... işlemleri için SQLiteDatabase nesnesi kullanılır.

  • ContentValues nesnesi, veritabanına eleman ekleme,güncelleme için gerekli veri formatıdır.

  • Cursor nesnesi, sorguya göre veritabanından çekilen kayıtları tutmak için kullanılır.



Hafta 8

Google Maps

-Ugulamamızda google maps servisini kullanabilmek için google'dan bir api key almamız gerekir.

  • Andorid'de google maps için hazır template bulunur. Bu template seçildiğinde bir kaç dosya oluşur ve konfigurasyon ayarlanır. Values klasöründe oluşan google_maps_api.xml dosyasında api key oluşturmak için uygulamaya özel bir url bulunur. Bu url den api key alınır ve aynı dosyada bulunan your_key_here yazan yere yapıştırılır. Uygulama artık maps servisini kullanmaya hazır durumdadır.

  • onMapReady() harita hazır duruma geçtiğinde çalışan mehoddur. Bu method içerisinde örneğin kullanıcının konumunu gösterebiliriz.

  • GeoCoder : enlem boylamı adrese(sokak,caddde,bölge...) veya tersi işlem yapmaya yarayan sınıftır. Bu sınıfın getFromLocationName() methodu, verilen string ifadeye göre Address listesi döndürür. Address listesi bir int parametre ile sınırlandırılabilir. Örneğin 2 parametresini verirsek string ifadeye göre en populer 2 address döner.

  • Address : enlem,boylam,ülke ismi,sokak adı,cadde adı,posta kodu... gibi değerleri tutan sınıftır.

  • LatLng : enlem ve boylamı tutan sınıftır.

  • mMap nesnesi, harita üzerinde işlemler yapmak için GoogleMaps referansıdır. Harita hazır olduğunda haritamız bu referansa initialize edilir.

  • mMap nesnesinin:
    addMarker() methodu ile herhangi bir konuma marker ekleyebiliriz. MarkerOption parameteresi alır.
    moveCamera() methodu ile kamerayı başka konuma yönlendirebiliriz.
    setMapType() methodu ile haritanın tipini değiştirebiliriz.
    setMyLocationEnabled() methodu ile kullanıcının konumunu gösterebiliriz. (izin gerekli)



Hafta 9

JSON

  • Json (JavaScript Object Notation) : veri taşıma formatıdır.

  • Hem makineler hem de insalar için kolay anlaşılan bir yapısı vardır.

  • Programlama dillerinden bağımsızdır ve bir çok programlama dili tarafından desteleniyor.

  • 2 veri yapısı kullanır.
    1 : Anahtar-değer iklilerini içeren bir koleksiyon (Json object)
    2 : Sadece değerler içeren bir dizi

  • Bir Json objesi {} dir. Arasında anahtar-değer ikilileri bulunur.

  • Bir Json dizisi [] dir. Arasında dizi değerleri bulunur.

  • Değerler bir string,number,true,false,null,Json object , Json dizisi olabilir.

  • Bir Json verisini internetten çekebiliriz. Bunun için URI connection nesnesi kullanılabilir (şuan tercih edilmiyor) veya Bu amaçla olşuturulmuş bir kütüphaneyi uygulamamıza ekleyebiliriz. Örneğin : Volley kütüphanesi

  • İnternnetten json verisi çekmek için internet izni olması gerekir. <uses-permission android:name="android.permission.INTERNET"/> android manifeste eklenir.

  • Verilerin düzngün çkilebilmesi için android manifest application tagının altına android:usesCleartextTraffic="true" eklenir.

  • volley kütüphanesini kullanabilmek için implementation 'com.android.volley:volley:1.1.1' satırı build.gradle(Module) dependencies altında eklenir.

Volley kütüphanesi :
  • StringRequest : bir client olarak sunucudan json verisi çekmek için kullanılır. Dönen değer bir RequestQueue 'e eklenmesi gerekir.

  • parametreler : request methodu , veri çekilecek adres(url) , gelen cevapları dinleyen ResponseListener nesnesi, hataları dinleyen ErrorListener nesnesi

  • ResponseListener'ın onResponse methoduna gelen veriler parametre olarak atanır. Json verisinin parse işlemi bu method içerisinde gerçekleşir.

  • parse işlemi gelen json verisine ögre değişir.

  • Örneğin Json verimiz bu şekildeyse :

- {
  "Companies": [
    {
      "Heading": "Cloud NX",
      "Detail": "For cloud solution, waiting for you",
      "ImageURL": "http://web.karabuk.edu.tr/yasinortakci/dokumanlar/web_dokumanlari/image1.png"
    },
    {
      "Heading": "Microsoft",
      "Detail": "Best solution for system programs",
      "ImageURL": "http://web.karabuk.edu.tr/yasinortakci/dokumanlar/web_dokumanlari/image2.png"
    },
    {
      "Heading": "Oracle",
      "Detail": "Spatial database is supported now",
      "ImageURL": "http://web.karabuk.edu.tr/yasinortakci/dokumanlar/web_dokumanlari/image3.png"
    }
  ]
} 

  • onResponse() içerisine bu kodu yazarak ilk nesnenin değerlerini alabiliriz.
- JSONObject jsonObject=new JSONObject(response);
  JSONArray jsonArray=jsonObject.getJSONArray("Companies");
  
  //Bu kod parçasıyla dizide bulunan ilk Json objesi alınır. (loop ile tüm veriler alınabilir.)
  JSONObject company=jsonArray.getJSONObject(0);
  String heading = company.getString("Heading");
  String detail = company.getString("Detail");
  String imagerUrl = company.getString("ImageURL");
                  

Picasso kütüphenesi :
  • İmage indirmek için kullanılan kütüphanedir. implementation 'com.squareup.picasso:picasso:2.71828'

  • kullanım : Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);



Hafta 10

JSoup

  • Html kodunu parse eden kütüphanedir.

  • Html kodu url üzerinden JSoup kütüphanesi veya volley gibi bir kütüphane kullanılarak çekilebilir.

  • JSoup ile url'den veri çekme :

Document doc = Jsoup.connect("https://en.wikipedia.org/").get();
  • Elimizde String tipinde html kodu olduğunu düşünelim.(örn: volley ile çektik) Öncelikle Document nesnesine dönüştürmeliyiz.
String html = "html kodu";
Document doc = Jsoup.parse(html);
  • Document nesnesinden ihtiyacımız olan Elementleri(tagları) seçmek için css seçicileri (css selector) kullanırız.
Elements elementler=doc.select("css seçici komutu");
  • elementler css seçici komutumuza göre Document nesnesinden seçilen tagları tutan dizidir.

  • Element nesnesine ait methodlar ile tagdan istediğimiz veriyi çekebiliriz. Veya varsa alt elementleri seçebiliriz.

  • örn : element.text() ile tag'a ait metin alınabilir.

  • örn : element.attr("href") tag'ın href niteliğinin değeri alınabilir.

  • örn : element.nextElementSibling(); aynı düzede bulunan diğer tag'a geçer.

  • örn : element.children(); element'in içinde bulunan elementleri döner. (bir alt elementler)

  • css seçici komutu, html koduna ve seçilmek istenen elementlere göre değişir.

  • örn : doc.select("span.containerDuyuruBaslikLabel"); class'i containerDuyuruBaslikLabel olan span tagları seçilir.

  • örn : doc.select("div.HaberBoxHeader a"); class'i HaberBoxHeader olan divlerin altında bulunan 'a' taglari seçilir.

  • Selector Syntax

  • Element sınıfı



Hafta 11

AsyncTask

  • AsyncTask, UI thread'i dondurmamak için bazı işlemleri (ör : 10 sn'e süren download işlemi) arka planda (başka bir thread'de) yapan abstract-generic bir sınıftır.

  • Bu sınıfı kullanmak için miras alır ve amacımıza uygun olarak özelleştiririz.

  • onPreExecute() : thread execute edilince ilk çalışan methoddur. Gerekli ön işlemler bu method içerisinde yapılır. ör : progress bar oluşturma

  • doInBackground() : arka planda yapılması istenen işlem (ör : bir metni indirme) bu mehod içerisinde yapılır.

  • onProgressUpdate() : doInBackground() methodu ile birlikte çalışır. Yapılan işin miktarı gösterilir. Ör : yapılan işin %10'u tamamlandı. publishProgress() methodu ile çağrılır.

  • onPostExecute(): İşlem tamamlandığında çalışan methoddur. (doInBackground() methodu bittiğinde çalışır.doInBackground() geri dönüş değeri bu methoda paramtre olarak verilir. )

Not : AsyncTask sınıfı generictir. <> arasına alınan parametreler override edilen methodların parametrelerini belirler.

Ör : AsyncTask<String,Integer,String>

  • 1.parametre(String) : doInBackground() methodunun parametresidir.
  • 2.parametre(Integer): onProgressUpdate() methodunun parametresidir.
  • 3.parametre(String) : doInBackground() methodunun geri dönüş tipi ve onPostExecute() methodunun paramtresidir.


Hafta 12

Fragment

  • Fragment kendi layout'u ve sınıfı olan , activity'nin görevlerini yerene getirebilen, activity'e benzer yapıdır.

  • Activity'e göre çok daha az kaynak tüketir ve daha performanslı çalışır.

  • Fragmentler bir Activity'e bağlı olarak çalışırlar. Tek başına çalışamazlar.

  • Bir Activity birden fazla fragment'e sahip olabilir.

  • Fragment bir view'dır. Bir fragment view 'a hangi class ile çalışacağı belirtilmelidir.

  • Fragment bir activity değildir. Bu nedenle fragment class içersinden, activitiye özel methodlara doğrudan erişilemez.

  • Fragmentler statik veya dinamik olarak yüklenebilirler.

  • statik : fragment activity başlatıldığında yüklenir.

  • dinamik : fragment çalışma zamanında, örneğin bir butona tıklandığında oluşturulur.

  • onCreateView() : fragmentin layoutun'u döndürür. Layout ile ilgili gerekli initialize işlemleri bu method içerisinde yapılır.

  • Activity içerisinden dinamik olarak fragment yükleme :

LoginFragment loginFragment = new LoginFragment();
getSupportFragmentManager().beginTransaction().add(R.id.container,loginFragment).commit();
  • Fragment içerisinden dinamik olarak fragment yükleme(değiştirme) :
RegisterFragment registerFragment = new RegisterFragment();
getFragmentManager().beginTransaction().replace(R.id.container,registerFragment).commit();
  • registerFragment : yüklenecek fragment

  • R.id.container : fragmenin yükleneceği alanın id si

  • Not : eğer aynı container'a bir fragment varken add ile başka fragment eklersek öncekinin üzerine eklenir.Bu nedenle replace methodu kullanılır.



Hafta 13

Fragment Devamı

Fragment ile activity arasında veri alışverişi :
  • Önemli bilgi : Bir Activity başlatıldığında içerisinde tanımlı fragmentlerin onAttach() methodu çalışır. Kapatıldığında ise onDetach() methodu çalışır. Bu methodların context parametresine, fragment hangi Activity'den yüklenmişse onun context'i atanır.

  • Activity'e fragmentten veri göndermek için Activity'e ait bir method kullanılabilir. Veri bu methoda parametre olarak verilir. (Color uygulamasında bu yöntem kullanılarak renk verisi alınıyor.)

  • Peki fragment'ten Activity'e ait bir methodu nasıl çağırırız ? Bunun için onAttach methoduna atanan context parametresini kullanırız.

  • Kısaca onAttach methodunda Activity'nin context'i alınır. Bu context ile Activity'nin methodları kullanılarak veri gönderilir.

Ek bilgiler :

  • interface sınıflar için bir arayüz - çatı görevi görür.

  • Eğer bir sınıf bir interface'yi implemente eder ise onun methodlarını tanımlamak(sağlamak) zorundadır.

  • Eğer bir sınıf bir interfaceyi implemente eder ise bu interface'nin referansı bu sınıfın nesnelerinin referansı olarak kullanılabilir.(polymorphism)

Fragmentler(static olanlar) arası veri alışverişi :
  • Veri gönderen fragment, veriyi Activity'e ait methoda parametre olarak verir. (önceki örnekte olduğu gibi)

  • Activity'de veri gönderilecek fragmenti id'sine göre bulur ve veriyi bu fragment'e ait methoda parametre olarak verir.

id sine göre fragmenti bulma örnek kod :

ReceiverFragment receiverFragment =(ReceiverFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_reciever);
receiverFragment.setName(name);
Fragment ile dinamik olarak oluşturulan fragment arası veri alışverişi :

Yukarıdaki örneğe benzerdir ama veri gönderilecek fragment, id'sine göre bulunmaz. newInstance() methodu ile oluşturulur.

Veri ise bu newInstance() methoduna parametre olarak verilir.

Örnek kod :

  • new instace ile fragment örneği oluşturma
ReceiverFragment receiverFragment=ReceiverFragment.newInstance(name);
  • fragment'in dinamik olarak yüklenmesi
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,receiverFragment).commit();

- veri alan fragment :

  • new instance methodu :
public static ReceiverFragment newInstance(String name) {
        ReceiverFragment fragment = new ReceiverFragment();
        Bundle args = new Bundle();
        args.putString("name", name);
        fragment.setArguments(args);
        return fragment;
}
  • veri, onCreate'de bu kod ile alınır ve global değişkene atanabilir.
    name = getArguments().getString("name");

androidn's People

Contributors

envercelik avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.