Android Programlama Ders 33: RequestCode ve ResultCode - Technopat
Sonuç bulunamadı
Bütün Sonuçları Göster
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net
  • Haber
  • Yapay Zeka
  • Tavsiyeler
  • Oyun
  • Video
  • Teknoloji
    • Mobil
    • Nasıl Yapılır
    • Yazılım
    • Elektronik Alışveriş Fırsatları
    • Pratik
    • Ev Teknolojileri
    • Makale
    • Güvenlik
    • Ekonomi
    • İnternet
    • Giyilebilir Teknoloji
    • Sağlık
    • Yazıcı
    • Sosyal Medya
    • Otomobil
      • Elektrikli Otomobil
  • Sosyal
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net
  • Haber
  • Yapay Zeka
  • Tavsiyeler
  • Oyun
  • Video
  • Teknoloji
    • Mobil
    • Nasıl Yapılır
    • Yazılım
    • Elektronik Alışveriş Fırsatları
    • Pratik
    • Ev Teknolojileri
    • Makale
    • Güvenlik
    • Ekonomi
    • İnternet
    • Giyilebilir Teknoloji
    • Sağlık
    • Yazıcı
    • Sosyal Medya
    • Otomobil
      • Elektrikli Otomobil
  • Sosyal
Sonuç bulunamadı
Bütün Sonuçları Göster
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net

Anasayfa - Makale - Pratik - Android Programlama Ders 33: RequestCode ve ResultCode

Android Programlama Ders 33: RequestCode ve ResultCode

13 Nisan 2014 - 13:00
- Mobil, Pratik

Android Programlama Ders 33’te geçen derste gördüğümüz requestCode ve resultCode parametrelerini projeyi kullanarak daha ayrıntılı inceleyeceğiz.

Geçen derslerimizde etkileşimi kullanarak sonucu almayı öğrendik. Bu olayı daha ayrıntılı araştıralım. Yeni proje oluşturacağız. Projede iki etkileşim (Activity) bize sonucu gönderecek. Etkileşimden gelen sonuç onActivityResult metodunda işleniyor. requestCode parametresi farklı etkileşimlerden gelen sonuçları ayırmak için kullanılıyor. Ve resultCode parametresi çağırmanın başarılı olup olmadığını belirtmek için kullanılıyor. Yeni bir proje açalım:

  • Project name: P0033_ActivityResult
  • Build Target: Android 4.2
  • Application name: ActivityResult
  • Package name: tr.example.activityresult
  • Create Activity: MainActivity

Main.xml dosyayı açalım ve aşağıdaki kodu kopyalayalım:

<?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:id="@+id/tvText"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="20dp"
  android:gravity="center_horizontal"
  android:text="Hello World"
  android:textSize="20sp">
 </TextView>
 <LinearLayout
  android:id="@+id/linearLayout1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_margin="20dp"
  android:orientation="horizontal">
 <Button
  android:id="@+id/btnColor"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginRight="5dp"
  android:layout_weight="1"
  android:text="Color">
 </Button>
 <Button
  android:id="@+id/btnAlign"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginLeft="5dp"
  android:layout_weight="1"
  android:text="Alignment">
 </Button>
 </LinearLayout>
 </LinearLayout>

Ekranda bir tane TextView (Hello World metni içerecek) olacak. İlk buton rengi seçmek ve ikincisi metni dizmek için. Butona basıldığı zaman seçim yapmak için etkileşimi (Activity) çağıracak. MainActivity.java’yı oluşturalım:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

  TextView tvText;
  Button btnColor;
  Button btnAlign;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tvText = (TextView) findViewById(R.id.tvText);

        btnColor = (Button) findViewById(R.id.btnColor);
        btnAlign = (Button) findViewById(R.id.btnAlign);

        btnColor.setOnClickListener(this);
        btnAlign.setOnClickListener(this);

    }

  @Override
  public void onClick(View v) {
    // TODO Auto-generated method stub

  }
}

Ekranda bulunan nesneleri belirttik ve butonlara işletici bağladık. Boş kalan onClick metodunu biraz sonra dolduracağız. İki etkileşimi oluşturalım. İlk etkileşim (ColorActivity) rengi değiştirecek. ColorActivity için layout dosyayı oluşturalım. İsmi color.xml olsun:

<?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="horizontal">
<Button
 android:id="@+id/btnRed"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="5dp"
 android:layout_weight="1"
 android:text="Red">
</Button>
<Button
 android:id="@+id/btnGreen"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="5dp"
 android:layout_weight="1"
 android:text="Green">
</Button>
<Button
 android:id="@+id/btnBlue"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="5dp"
 android:layout_weight="1"
 android:text="Blue">
</Button>
</LinearLayout>

ColorActivity.java oluşturalım:

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ColorActivity extends Activity implements OnClickListener {

  Button btnRed;
  Button btnGreen;
  Button btnBlue;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.color);

    btnRed = (Button) findViewById(R.id.btnRed);
    btnGreen = (Button) findViewById(R.id.btnGreen);
    btnBlue = (Button) findViewById(R.id.btnBlue);

    btnRed.setOnClickListener(this);
    btnGreen.setOnClickListener(this);
    btnBlue.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    Intent intent = new Intent();
    switch (v.getId()) {
    case R.id.btnRed:
      intent.putExtra("color", Color.RED);
      break;
    case R.id.btnGreen:
      intent.putExtra("color", Color.GREEN);
      break;
    case R.id.btnBlue:
      intent.putExtra("color", Color.BLUE);
      break;
    }
    setResult(RESULT_OK, intent);
    finish();
  }
}

Ekrandaki bulunan bileşenleri belirtiyoruz. Butonlara işletici (this) bağlıyoruz. OnClick metodunda Intent’i oluşturuyoruz ve v.getID () metodu kullanarak basılan butonu buluyoruz.  Intent’e “color”- ismi ve renginin değeri (Color.Red, Color.Green,Color.Blue) yerleştiriyoruz. setResult metodu kullanarak statüsü RESULT_OK ve sonuç olarak intent nesneyi kullanacağımızı belirtiyoruz. Etkileşimi kapatıyoruz (finish ()). Renkleri kullanmak için sistemde bulunan değerleri kullanacağız. Aynı şekilde ikinci etkileşimi oluşturuyoruz. AlignActivity için layout dosyayı oluşturalım. İsmi align.xml olsun:

<?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="horizontal">
<Button
 android:id="@+id/btnLeft"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="5dp"
 android:layout_weight="1"
 android:text="Left">
</Button>
<Button
 android:id="@+id/btnCenter"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="5dp"
 android:layout_weight="1"
 android:text="Center">
</Button>
<Button
 android:id="@+id/btnRight"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="5dp"
 android:layout_weight="1"
 android:text="Right">
</Button>
</LinearLayout>

AlignActivity.java oluşturalım:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class AlignActivity extends Activity implements OnClickListener {

  Button btnLeft;
  Button btnCenter;
  Button btnRight;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.align);

    btnLeft = (Button) findViewById(R.id.btnLeft);
    btnCenter = (Button) findViewById(R.id.btnCenter);
    btnRight = (Button) findViewById(R.id.btnRight);

    btnLeft.setOnClickListener(this);
    btnCenter.setOnClickListener(this);
    btnRight.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    Intent intent = new Intent();
    switch (v.getId()) {
    case R.id.btnLeft:
      intent.putExtra("alignment", Gravity.LEFT);
      break;
    case R.id.btnCenter:
      intent.putExtra("alignment", Gravity.CENTER);
      break;
    case R.id.btnRight:
      intent.putExtra("alignment", Gravity.RIGHT);
      break;
    }
    setResult(RESULT_OK, intent);
    finish();
  }
}

Bu kod ColorActivity gibi, tek farkı burada rengi değil metnin pozisyonunu değiştiriyoruz. İki etkileşimi de Manifest dosyasında kaydetmeyi unutmuyoruz. Şimdi MainActivity.java dosyasını bitirebiliriz. requestCode olarak iki değişkeni kullanacağız:

final int REQUEST_CODE_COLOR = 1;
final int REQUEST_CODE_ALIGN = 2;

OnClick metodu dolduralım:

@Override
  public void onClick(View v) {
    Intent intent;
    switch (v.getId()) {
    case R.id.btnColor:
      intent = new Intent(this, ColorActivity.class);
      startActivityForResult(intent, REQUEST_CODE_COLOR);
      break;
    case R.id.btnAlign:
      intent = new Intent(this, AlignActivity.class);
      startActivityForResult(intent, REQUEST_CODE_ALIGN);
      break;
    }
  }

OnClick metodunda basılan butonu buluyoruz ve sonucu almak için Intent’i gönderiyoruz. startActivityForResult metodunda iki çağrı arasında farkı çağrılan klastan (ColorActivity veya AlignActivity) ve requestCode parametrelerden oluşuyor. ColorActivity etkileşimi çağırdığımız zaman REQUEST_CODE_COLOR ve AlignActivity etkileşimde REQUEST_CODE_ALIGN kullanıyoruz. Bu değişkenleri kullanarak onActivityResult metoduna gelen sonucun hangi etkileşimden geldiğini bulabiliriz. MainActivity.java dosyasında onActivityResult metodu oluşturalım:

@Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // requestCode ve resultCode loga kaydedelim
    Log.d("myLogs", "requestCode = " + requestCode + ", resultCode = " + resultCode);
    //OK geldigi zaman
    if (resultCode == RESULT_OK) {
      switch (requestCode) {
      case REQUEST_CODE_COLOR:
        int color = data.getIntExtra("color", Color.WHITE);
        tvText.setTextColor(color);
        break;
      case REQUEST_CODE_ALIGN:
        int align = data.getIntExtra("alignment", Gravity.LEFT);
        tvText.setGravity(align);
        break;
      }
    // OK gelmedigi zaman
    } else {
      Toast.makeText(this, "Wrong result", Toast.LENGTH_SHORT).show();
    }
  }

Uygulamanın çalışmasını daha iyi anlamak için bildirimi (Log.d) kullanacağız. Bildirime requestCode ve resultCode parametrelerinin değerini yazdıracağız. ColorActivity ve AlignActivity etkileşimde setResult metodunda RESULT_OK statüsü yerleştiriyorduk. Bu demektir ki onActivityResult metodunda RESULT_OK çağrısının başarılı olup olmadığını ifade edecek. Çağrı başarılı olduğu zaman (resultCode = RESULT_OK) requestCode parametresine bakıyoruz. requestCode REQUEST_CODE_COLOR’a eşit olduğu zaman etkileşime sonucu gönderdiğini ifade ediyor. Intent’i  (data) kullanarak “color” isimli nesneyi alıyoruz ve değeri TextView’e yerleştiriyoruz. Color.WHITE getInExtra metodunda varsayılan parametre olarak kullanılıyor. Yani eğer Intent  “color” ismi nesneyi bulamıyorsa beyaz (WHITE) rengi kullanılacak. Aynı olay REQUEST_CODE_ALIGN için de geçerlidir. Eğer resultCode RESULT_OK’ye eşit değilse demek ki hata oluştu. Böyle bir olay oluştuğu zaman ekrana “Wrong result” mesajı göndereceğiz. Ekranda seçim yapmadan geri (Back) butonuna bastığı zaman böyle bir olay karşımıza çıkabilir. Uygulamayı kaydedelim ve çalıştıralım: hello world Color butonuna basıyoruz: color Mesela kırmızı (Red) rengi seçelim: red Bildirime bakıyoruz: log requestCode = 1, resultCode = -1 onActivityResult metodunda gelen requestCode bire eşit. Çünkü etkileşimi çağırmak için REQUEST_CODE_COLOR kullandık. resultCode = -1 sistemin  RESULT_OK değeri. Rengi seçtiğimiz zaman cevap olarak statüsü eşit RESULT_OK geldi. Alignment butonuna basıyoruz ve Right seçeneği seçiyoruz: right Bildirime bakıyoruz: requestCode = 2, resultCode = -1 onActivityResult metodunda gelen requestCode eşit iki. Çünkü etkileşimi çağırmak için REQUEST_CODE_ALIGN kullandık. resultCode = -1, yani RESULT_OK. Color butonuna basıyoruz ve geri (Back) butonuna basıyoruz: wrong result Hata olduğunu mesajdan görüyoruz. Bildirime bakalım: requestCode = 1, resultCode = 0   requestCode = 1 – doğru “Color” butonuna bastık (REQUEST_CODE_COLOR) resultCode = 0,  RESULT_CANCELED, değeri demek ki çağrı başarısızlıkla sonuçlandı. MainActivity.java dosyanın kodu:

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

  final int REQUEST_CODE_COLOR = 1;
  final int REQUEST_CODE_ALIGN = 2;

  TextView tvText;
  Button btnColor;
  Button btnAlign;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tvText = (TextView) findViewById(R.id.tvText);

    btnColor = (Button) findViewById(R.id.btnColor);
    btnAlign = (Button) findViewById(R.id.btnAlign);

    btnColor.setOnClickListener(this);
    btnAlign.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    Intent intent;
    switch (v.getId()) {
    case R.id.btnColor:
      intent = new Intent(this, ColorActivity.class);
      startActivityForResult(intent, REQUEST_CODE_COLOR);
      break;
    case R.id.btnAlign:
      intent = new Intent(this, AlignActivity.class);
      startActivityForResult(intent, REQUEST_CODE_ALIGN);
      break;
    }
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    Log.d("myLogs", "requestCode = " + requestCode + ", resultCode = " + resultCode);

    if (resultCode == RESULT_OK) {
      switch (requestCode) {
      case REQUEST_CODE_COLOR:
        int color = data.getIntExtra("color", Color.WHITE);
        tvText.setTextColor(color);
        break;
      case REQUEST_CODE_ALIGN:
        int align = data.getIntExtra("alignment", Gravity.LEFT);
        tvText.setGravity(align);
        break;
      }

    } else {
      Toast.makeText(this, "Wrong result", Toast.LENGTH_SHORT).show();
    }
  }
}

Ders Sonu Notları:

requestCode – çağrısının ID’si olarak sayabiliriz. startActivityForResult’a belirleniyor ve onActivityResult’a kontrol ediyor. Amacı hangi çağırına cevap geldiğini bilmek. resultCode – çağrının statüsü. setResult metodunda oluşuyor ve onActivityResult’a kontrol ediyor. Amacı çağrının başarılı olup olmadığını belirtmek. Gelecek derslerimizde URI nedir, onu öğreneceğiz.

Etiketler: align.xmlAndroidAndroid programlamadersFinishgetIDonActivityResultproğramprogramlamarequestCodeResult_OKresultCodesetResultteknolojiURIuygulamaWrong resultyeni
PaylaşPaylaşTweetYollaPaylaş
Victor Cuiumju

Victor Cuiumju

Yorum Yap Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

RSS Technopat Sosyal

  • GTX 1060 sistem için ucuz PSU önerisi
  • 700TL klavye 700TL mouse önerisi
  • GTX 970 hala alınır mı?
  • Windows 11 key önerisi
  • High-end kulak üstü kulaklık önerisi
  • Google TV'de flash bellek ile film nasıl izlenebilir?
  • 1500 TL'ye mouse pad önerisi
  • 1000-1500 TL'ye mouse önerisi
  • ANC özelliği olan kulak içi kulaklık önerisi
  • Valorant "güncelleme sunucusu kapalı" hatası

Technopat Video

Şu an oynayan

Fiyat/performans kralı geldi! Sinerji RTX 5070 sistem inceleme

Fiyat/performans kralı geldi! Sinerji RTX 5070 sistem inceleme

Fiyat/performans kralı geldi! Sinerji RTX 5070 sistem inceleme

Haber
Cep telefonları nasıl test ediliyor? Çin’deki fabrikaya gittik, gördük…

Cep telefonları nasıl test ediliyor? Çin’deki fabrikaya gittik, gördük…

Gündem
ASUS TUF Gaming T500MV

Laptop işlemcili kasa olur mu? ASUS TUF Gaming T500MV (2025) inceleme

Haber

Teknoloji tutkunu Technopatların ortak adresi: Technopat.net!

Güncel teknoloji, internet, donanım, yazılım, oyun ve daha fazlası haber, makale ve videolar ile Technopat’ta sizlerle.


01010100 01100101 01100011 01101000 01101110 01101111 01110000 01100001 01110100

Kategoriler

  • Yapay Zeka
  • Ev Teknolojileri
  • Makale
  • Video

Sosyal Medya

Bağlantılar

  • Hakkında
  • Haber
  • Video
  • Sosyal
  • Çerez Politikası
© 2011-2025 Technopat. Tüm Hakları Saklıdır.
Netse
Çerez Onayı
Web sitemizi ziyaret ettiğinizde, kullanıcı deneyiminizi daha iyi hale getirmek, hizmetlerimizi size daha etkin bir şekilde sunabilmek için çerezler (cookies) ve benzeri araçlar kullanıyoruz. Çerezler, internet sitesinin düzgün çalışmasını sağlamak, içeriği kişiselleştirmek, sosyal medya özellikleri sağlamak ve trafik analizi yapmak için kullanılan küçük metin dosyalarıdır. Çerezleri nasıl kullandığımız ve kişisel verilerinizi nasıl işlediğimiz hakkında daha fazla bilgi almak için çerez politikamızı ve kişisel veri politikamızı inceleyebilirsiniz.
Fonksiyonel Her zaman aktif
Teknik depolama veya erişim, sadece kullanıcının açıkça talep ettiği belirli bir hizmetin kullanılmasını sağlama amacıyla veya iletişimin elektronik iletişim ağı üzerinden iletilmesinin tek amacıyla yasal olarak kesinlikle gereklidir.
Tercihler
Teknik depolama veya erişim, abone veya kullanıcı tarafından istenmeyen tercihlerin depolanması yasal amacıyla gereklidir.
İstatistikler
Sadece istatistiksel amaçlarla kullanılan teknik depolama veya erişim. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Pazarlama
Teknik depolama veya erişim, reklam gönderimi için kullanıcı profilleri oluşturmak veya kullanıcıyı bir web sitesinde veya birden fazla web sitesinde benzer pazarlama amaçları için takip etmek amacıyla gereklidir.
  • Seçenekleri yönet
  • Hizmetleri yönetin
  • {vendor_count} satıcılarını yönetin
  • Bu amaçlar hakkında daha fazla bilgi edinin
Tercihleri yönet
  • {title}
  • {title}
  • {title}
Sonuç bulunamadı
Bütün Sonuçları Göster
  • Giriş
  • Teknoloji Haberleri
  • Sosyal
  • Nasıl Yapılır
  • Yapay Zeka
  • Video
  • Tavsiyeler
  • İncelemeler
    • Video İncelemeler
  • Güvenlik
  • Oyun
  • Makale
    • Pratik
    • Yazar Köşeleri

© 2025 Technopat
Sorularınız için Technopat Sosyal