Android Programlama Ders 07 Buton Tıklama Olayları

featured

Merhaba,
Önceki dersimizde EditText ve Button içeren basit ara yüzlü bir uygulama yapmıştık. Bu makaleyi henüz okumadıysanız lütfen buradan okuyun. Bu makalede MainActivity’ye birkaç kod ekleyeceğiz ve butona tıklandığında bu kodları çalıştıracağız.

  1. Android Studio içerisinde res/layout yolunda activity_main.xml dosyasını düzenleyin.
  2. Daha önce eklediğimiz <Button> elemanına adroid:onClick özelliği ekleyin ve değerini de “mesaji_gonder” yapın. Bu butona tıklandığında MainActivity içindeki mesaji_gonder metodunu çağıracaktır ve henüz bunu yazmadık, sonraki adımlarda yazacağız. Buton elemanımızın son hali:

<Button

android:text=”@string/buton_gorunen”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:onClick=”mesaji_gonder”/>

  1. java/com.mycompany.myapplication yolundaki MainActivity.java dosyasını açın.
  2. MainActivity sınıfı içerisinde mesaji_gonder() metodunu aşağıdaki şekilde ekleyin.

/** Kullanici Gönder düğmesine bastığında */
public void mesaji_gonder(View view) {
// butona basildiğinda yapılacak işlemler
}

Button’un onClick olayında yer alan mesaji_gonder olayı bu olaydır. Metodlar public (yerel) olmalıdır. Metodumuzda parametre olarak sadece bir View var (bu da tıklanan View olacak). Daha sonraki adımlarda bu oluşturduğumuz metodu EditText’i okumak için ve bunun değerini başka bir etkinlikte kullanmak için kodlayacağız.

 Intent Oluşturma

  1. MainActivity.java dosyasında mesaj_gonder() metodu içinde, DisplayMessageActivity adında bir aktivite (aktviteler asp.net, delphi gibi klasik programlamalardaki Form’lar gibidir) başlatmak için Intent intent = new Intent(this, DisplayMessageActivity.class); kodunu ekleyin. Son hali:

/** Kullanici Gönder düğmesine bastığında */

public void mesaji_gonder(View view) {

// butona basildiğinda yapılacak işlemler

Intent intent = new Intent(this, DisplayMessageActivity.class);

}

Android Studio kullanıyorsanız hata alacaksınız çünkü henüz DislayMessageActivity sınıfını oluşturmadık. Şimdilik hatayı yok sayın, zaten birazdan bu sınıfı da tanımlayacağız

Intent’ler iki ayrı aktivite arasında bağ kurmak için kullanılır. Daha fazla bilgi için Intents and Intent Filters adresini ziyaret edebilirsiniz.

Burada kullanılan yapı iki parametre alır:

Context ilk parametresidir. Bu kullanılmalıdır çünkü Aktivite sınıfları Context’lerin alt sınıflarıdır.

Uygulama elemanının hangi sınıfı Intent’e bağlanacak (hangi durumda Intent’e bağlanacak?)

  1. Android Studio Intent sınıfını eklemeniz gerektiğini söyleyecektir. Dosyanın en üstüne Intent sınıfını ekleyin: import android.content.Intent; (Android Studio içerisinde Alt+Enter yaptığınızda unutulmuş sınıflar eklenecektir)
  2. mesaj_gonder() metodu içerisinde EditText içerisindeki değere erişmek için  findViewById() kullanacağız.

/** Kullanici Gönder düğmesine bastığında */

public void mesaji_gonder(View view) {

// butona basildiğinda yapılacak işlemler

Intent intent = new Intent(this, DisplayMessageActivity.class);

EditText editText = (EditText) findViewById(R.id.mesaj_duzenle);

}

  1. Dosyanın en üstüne EditText sınıfını ekleyin. (import android.widget.EditText;)
  2. Yerel bir mesaj değişkeni tanımlayın ve EditText’in değerini bu değişkene atayın. Daha sonra mesajı intentler arası taşımak için putExtra() metodu kullanın. Bir Intent, veri tipleriyle birlikte değerleri taşıyabilir. putExtra() metodu ilk parametre olarak key_name değeri alırken ikinci parametre olarak da değerleri alır. Kodlarımızın son hali:

/** Kullanici Gönder düğmesine bastığında */

public void mesaji_gonder(View view) {

// butona basildiğinda yapılacak işlemler

Intent intent = new Intent(this, DisplayMessageActivity.class);

EditText editText = (EditText) findViewById(R.id.mesaj_duzenle);

String mesaj = editText.getText().toString();

intent.putExtra(EXTRA_MESSAGE, mesaj);

}

  1. MainActivity sınıfının üstünde EXTRA_MESSAGE’ı tanımlayın:

public class MainActivity extends ActionBarActivity {

public final static String EXTRA_MESSAGE = “com.hasandedeoglu.myapplication.mesaj”;

}

Sonraki aktiviteye ekstra veriler taşımak için intent’inizin kullanacağı extra public keyler tanımlamanız gerekir. Intent’in kullanacağı keyler cihazda benzersiz olmalıdır bu yüzden inten’in ekstradan kullanacağı keyleri tanımlarken uygulamanızın paket adını kullanmak iyi fikirdir böylece diğer uygulamalardan farklı bir key tanımlamış olursunuz.

  1. mesaji_gonder() metodu içinde intenti çağırmak için son olarak startActivity() metodunu çağırın ve parametre olarak da intent verin: startActivity(intent);

/** Kullanici Gönder düğmesine bastığında */

public void mesaji_gonder(View view) {

// butona basildiğinda yapılacak işlemler

Intent intent = new Intent(this, DisplayMessageActivity.class);

EditText editText = (EditText) findViewById(R.id.mesaj_duzenle);

String mesaj = editText.getText().toString();

intent.putExtra(EXTRA_MESSAGE, mesaj);

startActivity(intent);

}

Sistem bu çağrıyı alır ve Intent tarafından belirlenen aktivitenin bir örneğini başlatır. Şuan yapmamız gereken tek şey DisplayMessageActivity sınıfını tanımlamaktır.

İkinci Aktiviteyi Oluşturma

Aktivitenin tüm alt sınıfları onCreate() metodu ile uygulanır. onCreate metoduda bu aktivitenin layoutunu setContentView() metodu ile tanımlar ama biz Android Studio kullandığımız için bunların hepsini Android Studio bizim yerimize yapacak.

Android_Programlama_Ders_07_Buton_Tiklama_Olaylari_01

Java üzerinde sağ tıklayın, New > Activity > Blank Activity seçin

Android_Programlama_Ders_07_Buton_Tiklama_Olaylari_02

Aktivite adına DisplayMainActivity dedik çünkü kodlarımız bu şekilde idi, Hiyerarşik yapıda MainActivity’yi parent olarak seçtik ve finish dedik.  DisplayMessageActivity.java dosyasını açın onCreate() metodunun oluşturulduğunuz göreceksiniz. onCreateOptionsMenu() metodunu silin. Şimdilik bunu kullanmayacağız.

Şimdi tekrar bir göz atacak olursak, MainActivity’de EditText ve Button var, butona tıklanınca EditText’in değerini DisplayMessageActivity’e gönderiyor. DisplayMessageActivty ise ekranda Hello World! Yazdırıyor. Sonraki derslerde gelen bu mesajı DisplayMessageActivity’de işleyeceğiz.

Uygulamanızı çalıştırabilirsiniz. Sonraki makalede görüşmek üzere.

19 comments

  • Hocam ii günler ben main activity içine bir buton koyarak tıklanıldığında diğer yeni bir sayfaya geçişi yaptım.İkinci sayfanın içine bir buton koydum ve butona tıklanıldığında bir web sitesini açmasını istiyorum yardımcı olursanız sevinirim

  • Hocam Benim sorum sizin çok basit olabilir lütfen mazur görün, yeni başladım çünkü…. Bir buton ekledim ve butona hangi ve nasıl komut vermeliyim ki yeni bir sayfa açsın. açılacak sayfanın
    içinde matematiksel işlem yaptıracam. diğer bir butonda kelimlerle alakalı işlem yaptıracam onlara uygun bi sayfa.. umarım sorumu anlatabilmişimdir. Şİmdiden yardımlarınız için teşekkür ederim.

    • Lütfen makalelere devam edin. İstediğiniz işlemi kendiniz yapacaksınız ilerleyen konularda. Yapmazsanız söz bu işlemi kodlayıp göndereceğim. Sanırım eğitimci kimliğimle cevapladım:)

  • Hocam merhabalar,
    Fragmenttaki bir butandan baska bir activityye gecmek istersek yapmamız gereken sey activityler arası gecişle aynı mıdır?

    • Geçmek istediğiniz activity’nin sınıfını bildirmeniz gerekmektedir. Örnek:
      myButton.setOnClickListener((v) -> {
      Intent myIntent = new Intent(gecilecekactivity(), gecilecekactivitysinifi.class);
      startActivity(myIntent);
      });

  • Merhaba benimde sizin yardımınıza ihtiyacım var elimde hazırda apk uygulaması bulunmakta. bu uygulamayı türkçeye cevirebilmeteyim. Yalnız buttona basıp bıraktıgımda rengi değişerek on konumunda kalmaktadır. Bu buttonu sadece basılı tuttukca on konumda kalmasını elimizi çektiğimizde eski konumuna off konuma geçmesini istiyorum. Bununla ilgili kodlarda yardımcı olurmusunuz. Teşekkür ederim..

    • Kodlarınızı, en azından butonun rengini değiştirdiğiniz kodları paylaşırsanız belki başka arkadaşların da işine yarar.
      Tahminen butonun rengini değiştirebilmek için onClick olayını kullandınız. onKeyDown olayını aynı şekilde kullanırsanız isteğinizin yerine geleceğini düşünüyorum. Ama kodlarınızı paylaşırsanız daha fazla yardımcı olmaya çalışırım.

  • Merhabalar benim bi projem vardı da ne yapsam olmuyor birden fazlâ buton var tıklayınca rengi değişecek bırakıldığında eski halini alacak acaba kodlarını alabilir miyim?

  • Selam .Ben android studio kullaniyorum.hic bir hata falan yok, fakat ne zamanki bottonu tasimak isdersem haraket etdirmek isdersem olmuyor,mesela ben yukardaki bottonu asagi saga veya sola suruklemek isdersem olmuyor. yardim ederseniz sevinirim.

  • Merhaba
    öncelikle elinize sağlık
    Yazılarınızı takip etmeye başladım ama ben sıfırdan başladım şöyle bir sorun oldu:

    intent.putExtra(EXTRA_MESSAGE, mesaj); satırında

    bunda EXTRA_MESSAGE hatalı gözüküyor neden acaba

    • Geciken cevap için kusura bakmayın lütfen. Projeler dolayısıyla bazen site ile ilgilenemiyorum. Ne gibi bir hata alıyorsunuz? 6. adımı gerçekleştirmemiş olabilir misiniz?

      MainActivity sınıfının üstünde EXTRA_MESSAGE’ı tanımlayın:
      public class MainActivity extends ActionBarActivity {

      public final static String EXTRA_MESSAGE = “com.hasandedeoglu.myapplication.mesaj”;

      }

  • error: illegal character hatası copy paste kaynaklıymış. Teşekkürler

  • public final static String EXTRA_MESSAGE = “com.hasandedeoglu.myapplication.mesaj”;

    satırında error: illegal character hatası alınıyor. “com.hasandedeoglu.myapplication.mesaj” bu mesaj değeri nerede tutulmaktadır?

  • hocam MainActivity.java da hata olduğu için uygulamayı bu bölümde çalıştıramıyorum.

    • Galiba hallettim hocam buton için gerekli tanımlamaları class ın dışında yapmışım :)

      • Sizin yorumunuzdan sonra yazıları yukarıdan aşağıya tekrar inceledim. Ama sonra sorunu bulup çözmenize sevindim. İnsalık hali, bir hata yaparsam lütfen siz de düzeltin bu hataları. Bu arada hoşgeldiniz.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Lütfen işlem sonucunu yazın *