Ders 12: Android Activityler Arası Geçiş

29 Ocak 2012 Pazar
Androidin önemli konularından biri de (proje bütünlüğü sağlayabilmek için) Activityler (ekranlar) arası geçiş. Bunu küçük bir örnek ile görelim:

·         Bir proje açtığımızda main aktivitemiz otomatik olarak oluşur. Main aktiviteden kasıt, main.xml tasarımını içeren ve uygulamayı çalıştırdığımızda karşımıza çıkan ilk ekran. Bu durumda bize düşen şey öncelikli olarak bu ekranın tasarımını gerçekleştirmek:

Main.xml içerisine geliyoruz ve tasarımımızı oluşturuyoruz:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
  
<TextView
       android:text="2.ekrana gitmek için butona tıklayın."
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>  
   <Button
       android:id="@+id/git"
       android:text="Git"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center" />
</LinearLayout>


Container olarak LinearLayout kullandık. Bir TextView ile derdimizi anlattık ve tıklanınca bizi 2.ekrana götürecek bir buton koyduk. Butonun boyutu minnacık oldu, biliyorum. İsteyen wrap_content değeri yerine istediği boyutu belirleyebilir.

·         Şimdi sıra geldi 2.activitymizi (ekranımızı) oluşturmaya. Bunun için com. İle başlayan paketin üzerine geliyoruz, sağ tıklıyoruz ve New>Class seçeneğini seçiyoruz.


·         Karşımıza gelen New Java Class penceresinde Name kısmına istediğimiz ismi yazıyoruz. (Ben ikinciaktivite demeyi tercih ettim.) Browse kısmından SuperClass seçimini geliştiriyoruz. Type alanına “Activity” yazıyoruz ve alt kısmından da “Activity-android.app” seçeneğini seçiyoruz.Hepsi bu kadar.



·         Bu işlemden sonra karşımıza yeni oluşturduğumuz java sınıfımız gelecek. Ve içerisinde şu kodlar olacak:


package com.aktivitegecisi;
import android.app.Activity;
public class ikinciaktivite extends Activity {
}


·         Bunun içerisine, ilk activity sınıfımızdan (main activity, hazır olarak gelen) copy-paste yaparak, doğru yerlere sırasıyla şu kodları yapıştırıyoruz:


import android.os.Bundle;
@Override   
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
setContentView(R.layout.main);
    }


·         Yani 2.activity sınıfımızın içi de şu şekilde gözükecek:

package com.aktivitegecisi;
import android.app.Activity;
import android.os.Bundle;
public class ikinciaktivite extends Activity {
        @Override
           public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.main);
        }
}


Burada setContentView (bilindiği üzere tasarımı göstermeye yarıyor) parametresi  R.layout.main , yani main.xml tasarımı çağrılıyor.Oysaki biz istiyoruz ki bizim 2.ekranımızın tasarımı farklı olsun.

·         2.ekran görüntümüzü oluşturmak için, yeni bir XML dosyası yaratmamız gerekiyor.Bunun için, uygulamamızı çalıştırdığımız “run” butonunun 2 solunda bulunan ve açıklaması “Opens a wizard to help create a new Android XML File” olan butona tıklıyoruz. Burada File kısmına 2.java dosyamızın adını ( ben ikinciaktivite demiştim) yazıyoruz (bu bildiğim kadarıyla şart değil, ama bana xml dosyası ile java dosyası arasındaki bağlantıyı hatırlatacağı için daha rahat geliyor),  root element olarak layout tipini seçiyoruz.Mesela LinearLayout gibi. Bir sonraki sayfaya geçiyoruz. Burada ekranımızın bazı özelliklerini ve hangi dizinde olacağını ayarlayabiliyoruz. Ben bir değişiklik yapmadan,bu sayfayı da sonlandırıyorum. 



·         Karşımıza oluşturduğumuz xml dosyası geliyor.İçerisinde şu anda şu anlar yazılı:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>

İstediğimiz bir tasarımı içerisinde gerçekleştiriyoruz. Ben şimdilik sadece bir TextView koyuyorum:


<TextView
       android:text="2.ekrana hoşgeldiniz"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center" />


·         2.ekranımızın nasıl görüneceğini belirledikten sonra, ikinciaktivite.java dosyamıza gidiyoruz ve setContentView metodunun parametresini değiştiriyoruz:


setContentView(R.layout.ikinciaktivite);


Artık 2.ekranımızın görüntüsü ikinciaktivite.xml içinde belirlediğimiz gibi gözükecek.

·         Şimdi ekranlar arasındaki bağlantıyı sağlayalım. İlk java dosyamızın tasarımında bir TextView ve Button vardı. Butona tıklayınca, 2.sayfaya geçicektik. Bu yüzden ilk java dosyamızın içine gelip, bu butona erişip ona bir dinleyici atamamız gerekiyor.
·         Daha önceki örneklerde olduğu gibi bunda da, import işlemini, implement işlemini, findViewById ile butona erişim işlemini ve OnClick metodunu yazma işlemini gerçekleştiyoruz. Sonuçta ilk java dosyamız ( main activity) şöyle oluyor:


package com.aktivitegecisi;
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;
public class AktivitegecisiActivity extends Activity implements OnClickListener {   
/** Called when the activity is first created. */
          Button git;
   
@Override   
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);       
setContentView(R.layout.main);       
git = (Button)findViewById(R.id.git);       
git.setOnClickListener(this);
   }
@Override
public void onClick(View arg0) {
     // TODO Auto-generated method stub
      startActivity(new Intent(AktivitegecisiActivity.this,ikinciaktivite.class));
           
       }
}


Burada daha önceki örneklerden farklı olan tek bir kısım var. O da onClick(…) metodu içerisindeki alan. Intent kavramı daha sonraki derslerde anlatılacak, ondan dolayı ona fazla takılmayın. Parametre olarak da bi o anda bulunduğumuz sınıfın adını kullandığımıza, bir de gideceğimiz sınıfın adını kullandığımıza dikkat edin, o kadar.

·         Uygulamayı çalıştıralım, bakalım olmuş mu?  Hata vereceğini düşünüyorum, çünkü en önemli şeyi unuttuk!
·         İlk dersler de söylediğimiz gibi bir activity’nin çalışması için mutlaka AndroidManifest.xml içerisinde tanımlanması gerek! Bunun için AndroidManifest.xml içerisine geliyoruz ve activitymizi ekliyoruz.Ekleme işlemini Application tagları arasında, en son kapanmış activity tagının hemen ardına yazıyoruz:
·         Artık işlem tamam.2 ekranımız var ve aralarında geçiş yapabiliyoruz.


4 yorum:

  1. zeki safa göksu dedi ki...:

    "setContentView(R.layout.main);" burda mainin altını ciziyor sebebi ne olabilir?

  1. 3k dedi ki...:

    main.xml dosyanız olmayabilir, adı başka olabilir. Kontrol edebilir misiniz tekrardan?

  1. thelongmt2 dedi ki...:

    Zeki bey main kısmını activity_main olarak değiştirin düzelir

  1. administrator dedi ki...:

    bende AktivitegecisiActivity hata veriyor neden olabilir

Yorum Gönder