MOBİL UYGULAMA GELİŞTİRME Hedefler Bu üniteyi çalıştıktan sonra; BaseAdapter yapısından miras alabilir, ListView bileşenine özel layout ve adapter oluşturabilir, WebView bileşenini kullanarak web sayfalarını gösterebilir, Birden fazla activity nesnesi ile çalışabilir.
2 ListView,WebView ve Activityler Mobil Uygulama Geliştirme İçindekiler PROGRAMLAMA VE JAVA TEMEL KAVRAMLARI ListView WebView Birden fazla activity ile çalışma
Mobil Uygulama Geliştirme Öğr.Gör. Nevzat TAŞBAŞI 3 ListView Verileri tek satır içerisinde satırlar şeklinde listeleyerek göstermek amacıyla kullanılan bileşenlerden biride ListViewdi. ListView içerisinde temel veri türlerinden farklı olarak kendi oluşturacağımız veri yapısını göstermek için adapter içerisinde kullanılacak nesnelerin sınıf tanımının yapılması gerekmektedir. Örnek olarak kişilerin adını ve soyadını listeleyeceğimiz bir uygulama gerçekleştireceğimiz için isim isimli bir sınıf tanımlıyoruz. public class isim { private String ad; private String soyad; public isim(string a, String s) { super(); ad = a; soyad=s; public void setad(string a) { ad=a; public void setsoyad(string s){ soyad=s; public String getad() { return ad; public String getsoyad(){ return soyad; Kullanacağımız sınıfı tanımladıktan sonra bu sınıfı kullanacak olan bir Adapter tanımlıyoruz. Bunun için oluşturulacak adapterin miras alacağı BaseAdapter sınıfının projeye dâhil edilmelidir. import android.app.activity; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import java.util.arraylist; Oluşturulan adapter sınıfı BaseAdapter sınıfından miras almalıdır. BaseAdapter sınıfı içerisinde 4 adet Abstract sınıfın tanımlanması gerekir. public class BenimAdapter extends BaseAdapter Adapter içerisinde gruplanacak sınıf içerisinde bu sınıftan oluşturulan nesnenin alınacağı bir değişken ve adapter in tanımlandığı activity nin bilgilerinin tutulacağı değişken belirlenebilir. Oluşturucu sınıf ile Adapter tanımlandığında tanımlandığı yer ve kullanılan sınıfın alındığı metod tanımlanır. public BenimAdapter(Context activity, int arayuz, ArrayList<isim> isimler) { kodlar
4 ListView,WebView ve Activityler Mobil Uygulama Geliştirme Listede kaç eleman olduğunun döndürüldüğü metot yeniden yazılır. public int getcount() { return <nesnenin_adı>.size(); Listede indis değeri gönderildiğinde elemanı döndüren metot yeniden yazılır. public isim getitem(int indis) { return <nesnenin_adı>.get(indis); Listenin kullandığı layout üzerindeki yapıları kullanarak listeyi dolduran metod yeniden yazılır. Burada alınan indis değerine göre nesneden çekilen değer, alınan layout üzerinde bulunan bileşenlere yazılır. public View getview(int indis, View v, ViewGroup arg2) { if (v == null) v = inflater.inflate(r.layout.arayuz, null); TextView ad = (TextView) v.findviewbyid(r.id.ad); TextView soyad = (TextView) v.findviewbyid(r.id.soyad); isim isi = ismi.get(indis); ad.settext(isi.getad()); soyad.settext(isi.getsoyad()); return v; Adapter in içerisinde nesnenin nasıl listeleneceğini gösteren şablon dosyasının (layout altında xml dosyası) oluşturulması sağlanır. Android te hazır olarak gelen şablonlara ek olarak kendi şablonlarımızı hazırlayarak kullanabiliriz. Oluşturulan adapter sınıfının tanımlandığı ana activity de listview e adapter eklenir. WebView ArrayAdapter<veri_türü> adapter_adı=new ArrayAdapter<veri_türü>(aktivity_adı, layout_adı,<grupverisiadı>); Android uygulamalarında web sayfaları gösterimini gerçekleştirmek amacıyla WebView bileşeni kullanılır. HTML5 uyumlu gösterici web sayfası içeriğini gösterecektir. Web sayfalarını görebilmek için projemize internete erişim izni vermemiz gerekmektedir.
Mobil Uygulama Geliştirme Öğr.Gör. Nevzat TAŞBAŞI 5 Bunun için AndroidManifest dosyası tıklandığında açılan pencere alt kısımda yer alan Permissions sekmesi tıklanır. Açılan pencerede Add butonu tıklanır. Açılan iletişim penceresinde Uses Permission seçilir ve Tamam butonuna tıklanır. Açılan sayfada eklenmek istenen izinler seçilerek eklenir.
6 ListView,WebView ve Activityler Mobil Uygulama Geliştirme Yada uses-permisson etiketi kullanılarak Android:name özelliğine android.permission.internet değeri girilir. <uses-permission android:name="android.permission.internet" /> Gösterilecek websayfasının adresi, bileşenin loadurl metoduna parametre olarak verilir. WebView bileşeninde web sayfaları gösterilebileceği gibi oluşturduğumuz html kodlarınıda gösterebiliriz. Bunun için loaddata(htmlkodu, text/html,null) metodunu kullanılır. Birden Fazla activity ile çalışmak Yeni activity oluşturmak için en kısa yöntem src klasörü altında yeralan activity dosyasının kopyalarak gerçekleştirmektir. Benzer şekilde Layout dosyasıda kopyalanarak çoğaltılır. Oluşturulan dosyanın AndroidManifest dosyasına eklenmesi gerekmektedir. Bunun için AndroidManifest dosyası tıklandığında açılan pencere alt kısımda yer alan Application sekmesi tıklanır.
Mobil Uygulama Geliştirme Öğr.Gör. Nevzat TAŞBAŞI 7 Bu pencerede Application Nodes kısmında yeralan Add.. butonu tıklanır. Açılan pencerede Activity seçilir ve OK tıklanır. Yan tarafta açılan kısımda Browse komutu tıklanarak eklenecek Activity seçilir. Yada AndroidManifest.xml dosyası içerisinde Android etiketinin andrid:name özelliğine paket ismiyle beraber activity adı girilir.
8 ListView,WebView ve Activityler Mobil Uygulama Geliştirme <activity activity> android:name=<paketadı.aktiviteadı></ Yeni bir activity açmak için Intent sınıfından yararlanılır. İle oluşturulur. Intent i=new Intent(getApplicationContext(),activity sınıfı); Intent sınıfında activiyler arasında veri aktarımı için komutu kullanılır. Okumak için kullanılır. Intent_nesnesi.putExstra(anahtar,deger); getintent().getextras().getstring(anahtar) Ya da parçalar halinde teker teker okuma işlemi gerçekleştirilir. Intent Intent_isim=getIntent(); Bundle bundle_isim=intent_isim.getextras(); String isim=bundle_isim.getstring(anahtar); ListView Örneği Arayuz.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi d" android:layout_width="fill_parent" android:orientation="horizontal" > <TextView android:id="@+id/ad" android:layout_width="wrap_content" android:gravity="center_vertical" android:text="spor" android:textsize="20sp" /> <TextView android:id="@+id/soyad" android:layout_width="wrap_content" android:text="stur" /> Activity_main.xml </LinearLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi d" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin"
Mobil Uygulama Geliştirme Öğr.Gör. Nevzat TAŞBAŞI 9 android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".mainactivity" > <ListView android:id="@+id/liste" android:layout_width="match_parent" android:layout_alignparentleft="true" android:layout_alignparenttop="true" > </ListView> </RelativeLayout> İsim.java: BenimAdapter.java: public class isim { private String ad; private String soyad; public isim(string a,string s) { this.ad=a; this.soyad=s; public void setad(string ad) { this.ad=ad; public void setsoyad(string soyad) { this.soyad=soyad; public String getad() { return this.ad; public String getsoyad() { return this.soyad; import java.util.arraylist; import com.example.adaplist.r; import com.example.adaplist.isim; import android.content.context; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.textview; public class BenimAdapter extends BaseAdapter { private LayoutInflater inflater; private ArrayList<isim> ismi; Context ornek; int lay; public BenimAdapter(Context activity, int arayuz, ArrayList<isim> isimler) { ornek=activity; ismi=isimler;
10 ListView,WebView ve Activityler Mobil Uygulama Geliştirme lay=arayuz; public int getcount() { return ismi.size(); public isim getitem(int indis) { return ismi.get(indis); public long getitemid(int indis) { return indis; public View getview(int indis, View v, ViewGroup arg2) { if (v == null) { LayoutInflater laylo = (LayoutInflater)ornek.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = laylo.inflate(r.layout.arayuz, null); TextView ad = (TextView) v.findviewbyid(r.id.ad); TextView soyad = (TextView) v.findviewbyid(r.id.soyad); isim isi = ismi.get(indis); ad.settext(isi.getad()); soyad.settext(isi.getsoyad()); return v; MAinactivity.java: package com.example.adaplist; import com.example.adaplist.isim; import java.util.arraylist; import java.util.list; import android.app.activity; import android.os.bundle; import android.view.menu; import android.widget.listview; public class MainActivity extends Activity { ListView liste; BenimAdapter adapter; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); ArrayList<isim> isimler = new ArrayList<isim>(); isimler.add(new isim("ali","gel")); isimler.add(new isim("veli","git")); liste=(listview) findviewbyid(r.id.liste); adapter=new BenimAdapter(this,R.layout.arayuz,isimler); liste.setadapter(adapter);
Mobil Uygulama Geliştirme Öğr.Gör. Nevzat TAŞBAŞI 11 WebSayfası Örneği AndroidManifest dosyası: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sayfaornek" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="18" /> <uses-permission android:name="android.permission.internet"/> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name="com.example.sayfaornek.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> Layout dosyası: Activity dosyası: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".mainactivity" > <WebView android:id="@+id/webview1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignparentleft="true" android:layout_alignparenttop="true" /> </RelativeLayout> package com.example.sayfaornek; import android.app.activity; import android.os.bundle; import android.view.menu; import android.webkit.webview; public class MainActivity extends Activity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); WebView sayfa=(webview) findviewbyid(r.id.webview1); sayfa.loadurl("http://www.sakarya.edu.tr");
12 ListView,WebView ve Activityler Mobil Uygulama Geliştirme Birden Fazla activity ile çalışma İnternet izninin ve activite kaydının AndroidManifest dosyasına kaydeilmiş olması gerekir. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.websayfasi" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="18" /> <uses-permission android:name="android.permission.internet"/> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name="com.example.websayfasi.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name="yenisayfa"></activity> </application> </manifest> Websayfasi.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".yenisayfa" > <WebView android:id="@+id/sayfa" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignparentleft="true" android:layout_alignparenttop="true" /> </RelativeLayout>
Mobil Uygulama Geliştirme Öğr.Gör. Nevzat TAŞBAŞI 13 Activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".mainactivity" > <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:text="açılacak Sayfa :" /> <RadioGroup android:id="@+id/radiogroup1" android:layout_width="wrap_content" android:layout_alignleft="@+id/textview1" android:layout_below="@+id/textview1" > <RadioButton android:id="@+id/radio0" android:layout_width="wrap_content" android:checked="true" android:text="bilişim Mühendisliği" /> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:text="bilgisayar Mühendisliği" /> </RadioGroup> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_alignleft="@+id/radiogroup1" android:layout_below="@+id/radiogroup1" android:text="sayfayı Aç"/> </RelativeLayout> Yenisayfa.java import android.app.activity; import android.content.intent; import android.os.bundle; import android.webkit.webview; public class yenisayfa extends Activity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.websayfasi); Intent gelensyf=getintent(); Bundle degerler=gelensyf.getextras(); String syf=degerler.getstring("syf"); WebView wv1=(webview) findviewbyid(r.id.sayfa); wv1.loadurl(syf);
14 ListView,WebView ve Activityler Mobil Uygulama Geliştirme Main_Activity.java import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.radiobutton; public class MainActivity extends Activity { String syf; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); Button btn1=(button) findviewbyid(r.id.button1); syf="http://www.sakarya.edu.tr"; final RadioButton rb0=(radiobutton) findviewbyid(r.id.radio0); final RadioButton rb1=(radiobutton) findviewbyid(r.id.radio1); btn1.setonclicklistener(new OnClickListener(){ public void onclick(view arg0) { if(rb0.ischecked()) syf="http://www.bsm.sakarya.edu.tr"; else if(rb1.ischecked()) syf="http://www.cs.sakarya.edu.tr"; else syf="http://www.bf.sakarya.edu.tr"; Intent sayfa=new Intent(); sayfa.setclass(getapplicationcontext(), yenisayfa.class); sayfa.putextra("syf", syf); startactivity(sayfa); );