Merhaba ve hoş geldiniz! Bugün Android geliştirme dünyasında sıkça karşılaşılan bir konuyu ele alacağız: ‘Parcelable’.
Android’de veri transferi oldukça yaygındır. Sıklıkla bir etkinlikten veya parçadan diğerine veri göndermek veya bir veri modelini başka bir etkinliğe aktarmak gibi durumlarla karşılaşırız. Bu tür veri transfer işlemlerinde verinin serileştirilip serileştirilmesi gerekmektedir. İşte bu noktada Parcelable devreye girer.
Parcelable, Android platformunda kullanılan bir arayüzdür ve bir nesnenin parçalara ayrılarak başka bir nesne haline getirilmesine olanak tanır. Parcelable, Serializable’a bir alternatif olarak düşünülebilir, ancak daha performanslı ve optimize edilmiştir.
Adım 1: Projenin Ayarlarını Yapma
Başlamak için Android Studio’da projemizi ayarlayalım. Android Studio’yu açın ve yeni bir proje oluşturun. Uygun bir proje adı ve paket adı belirleyin ve hedef kitlenize bağlı olarak minimum SDK sürümünü seçin.
Adım 2: Tasarımı Yapma
Parcelable sınıfını oluşturmadan önce, videoda gösterildiği gibi tasarım yapmaya başlayalım. Kullanıcı girişi için üç EditText nesnesini içeren bir düzen oluşturmalıyız. Ayrıca, etkinlikler arasında geçişi kolaylaştırmak için bir düğme ekleyeceğiz.
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="20dp" tools:context=".MainActivity"> <EditText android:id="@+id/editTextFirstName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" android:hint="First Name" /> <EditText android:id="@+id/editTextLastName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" android:hint="Last Name" /> <EditText android:id="@+id/editTextAge" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="Age" android:inputType="number" /> <Button android:id="@+id/btnSendData" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send Data" /> </LinearLayout> |
Adım 3: Parcelable Sınıfını Oluşturma
Düzen hazır olduğunda, Parcelable sınıfını oluşturmaya devam edebiliriz. Bu sınıf, bileşenler arasında aktarmak istediğimiz veriyi temsil edecek. EditText nesnelerinden değerleri tutmak için gerekli alanları tanımlayacağız. Ayrıca, bir yapıcı yöntem ve gerekli get ve set yöntemlerini içereceğiz.
User.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
public class User { private String firstname; private String lastname; private int age; public User(String firstname, String lastname, int age) { this.firstname = firstname; this.lastname = lastname; this.age = age; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } |
Parcelable sınıfını tanımladıktan sonra, gerekli yöntemleri ekleyerek Parcelable arayüzünü uygulayacağız: ‘writeToParcel’ ve ‘createFromParcel’. Bu yöntemler, nesnemizin seri hale getirilmesi ve seriden geri dönüştürülmesini işleyecek.
Şimdi Parcelable sınıfımız tamamlandığına göre, eğitimin bir sonraki adımlarına geçebiliriz.
User.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.NonNull; public class User implements Parcelable { private String firstname; private String lastname; private int age; public User(String firstname, String lastname, int age) { this.firstname = firstname; this.lastname = lastname; this.age = age; } protected User(Parcel in) { firstname = in.readString(); lastname = in.readString(); age = in.readInt(); } public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { return new User(in); } @Override public User[] newArray(int size) { return new User[size]; } }; public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString(firstname); dest.writeString(lastname); dest.writeInt(age); } } |
Adım 4: Parcelable’i Aktiviteler veya Fragmentler Arasında Kullanma
Hazırda bulunan Parcelable sınıfımızı artık aktiviteler veya fragmentler arasında veri transferi için kullanabiliriz. Şimdi bunu nasıl başarabileceğimize bir göz atalım.
Kodumuzda, ‘edFirstName’, ‘edLastName’, ‘edAge’ ve ‘btnSend’ olarak tanımladığımız EditText ve Button nesnelerimiz bulunmaktadır. Bu UI elemanlarına, ‘findViewById’ yöntemini kullanarak referanslarını alıyoruz.
Sonrasında, ‘btnSend’ düğmesine bir onClickListener ekliyoruz. Düğmeye tıklandığında, onClick metodu tetiklenir. Bu metot içerisinde, ‘edFirstName’, ‘edLastName’ ve ‘edAge’ EditText nesnelerinden kullanıcı tarafından girilen değerleri alıyoruz.
Bu değerleri kullanarak, Parcelable sınıfımız olan ‘User’ için yeni bir örnek oluşturuyor ve toplanan verileri onun yapıcı metoduna parametre olarak iletiyoruz.
Bu Parcelable nesnesini başka bir aktiviteye aktarmak için, mevcut aktivite ‘MainActivity’ ve hedef aktivite ‘UserActivity’ olarak belirterek bir intent oluşturuyoruz. ‘putExtra’ yöntemini kullanarak intent’e Parcelable nesnesini ekliyoruz. Anahtar-değer çifti şeklinde, anahtar olarak ‘user’ ve değer olarak Parcelable nesnesini kullanıyoruz.
Son olarak, ‘startActivity(intent)’ yöntemini çağırarak ‘UserActivity’yi başlatıyoruz. Bu, alıcı aktiviteye geçişi başlatırken Parcelable verileri de beraberinde taşır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity { EditText edFirstName,edLastName,edAge; Button btnSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edFirstName = findViewById(R.id.editTextFirstName); edLastName = findViewById(R.id.editTextLastName); edAge = findViewById(R.id.editTextAge); btnSend = findViewById(R.id.btnSendData); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String firstname = edFirstName.getText().toString(); String lastname = edLastName.getText().toString(); int age = Integer.parseInt(edAge.getText().toString()); User user = new User(firstname,lastname,age); Intent intent = new Intent(MainActivity.this,UserActivity.class); intent.putExtra("user",user); startActivity(intent); } }); } } |
Alıcı aktivitede, ‘getParcelableExtra’ yöntemini kullanarak Parcelable nesnesini intent’ten alabiliriz. Aynı anahtarı ‘user’ olarak kullanarak geçerli veriye erişip kullanabiliriz.
İşte Android uygulamamızda aktiviteler veya fragmentler arasında veri transferi için Parcelable’i nasıl kullanıyoruz. Kendi projelerinizde etkili veri transferi için Parcelable’ı keşfetmek ve uygulamak için özgürsünüz.
Adım 5: User Activity’nin Tasarımı
Kullanıcı arayüzümüzü tasarladıktan sonra, düzen dosyasına göz atalım. Kök öğe olarak ConstraintLayout’i kullandık ve üç TextView ekledik: textViewFirstName, textViewLastName ve textViewAge. Bu TextView’ler, Parcelable aracılığıyla aldığımız ilgili verileri görüntüleyecek.
Kısıtlamaların yardımıyla, TextView’leri ekran üzerinde doğru hizalamayı sağladık. layout_width ve layout_height özellikleri ‘wrap_content’ olarak ayarlanmıştır, böylece içeriğe bağlı olarak boyut ayarlanır.
acitivity_user.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".UserActivity"> <TextView android:id="@+id/textViewFirstName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:text="TextView" android:textSize="34sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.501" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textViewLastName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:text="TextView" android:textSize="34sp" app:layout_constraintEnd_toEndOf="@+id/textViewFirstName" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@+id/textViewFirstName" app:layout_constraintTop_toBottomOf="@+id/textViewFirstName" /> <TextView android:id="@+id/textViewAge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:text="TextView" android:textSize="34sp" app:layout_constraintEnd_toEndOf="@+id/textViewLastName" app:layout_constraintStart_toStartOf="@+id/textViewLastName" app:layout_constraintTop_toBottomOf="@+id/textViewLastName" /> </androidx.constraintlayout.widget.ConstraintLayout> |
Sadece birkaç basit adımda, UserActivity için görsel olarak çekici bir düzen oluşturduk. Şimdi, önceki aktiviteden gelen verileri ele alalım.
İşte bu kadar! Parcelable, Android geliştirmede etkili veri transferine yardımcı olan güçlü bir araçtır. Şimdi, UserActivity’de aktarılan verileri nasıl alıp görüntüleyebileceğimize bakalım.
Adım 5: User Activity’de Veriyi Açma
Kodumuzda, tvFirstName, tvLastName ve tvAge gibi TextView nesnelerini tanımladık. Bu TextView’ların referanslarını ‘findViewById’ yöntemini kullanarak alıyoruz.
Sonraki adımda, UserActivity’yi başlatan intent’i ‘getIntent’ yöntemiyle elde ediyoruz. Ardından, ‘getParcelableExtra’ yöntemini kullanarak intent’ten Parcelable nesnesi olan ‘User’ nesnesini alıyoruz ve anahtarı ‘user’ olarak belirtiyoruz.
Veriyi görüntülemek için, her bir TextView üzerinde setText yöntemini kullanarak User nesnesinden değerleri ayarlıyoruz. ‘tvFirstName’ ilk adı, ‘tvLastName’ soyadı ve ‘tvAge’ yaşını görüntüler.
Bu basit adımlarla, Parcelable verileri başarıyla alıp UserActivity’de görüntüledik.
UserActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class UserActivity extends AppCompatActivity { TextView tvFirstName,tvLastName,tvAge; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user); tvFirstName = findViewById(R.id.textViewFirstName); tvLastName = findViewById(R.id.textViewLastName); tvAge = findViewById(R.id.textViewAge); Intent intent = getIntent(); User user = intent.getParcelableExtra("user"); tvFirstName.setText(user.getFirstname()); tvLastName.setText(user.getLastname()); tvAge.setText(String.valueOf(user.getAge())); } } |
Bu, veri transferi için Parcelable kullanma konusundaki rehberimizin sonuna geliyor. Umarım bu videoyu bilgilendirici ve faydalı bulmuşsunuzdur. Herhangi bir sorunuz veya öneriniz varsa, lütfen aşağıdaki yorum bölümünde paylaşmaktan çekinmeyin. İzlediğiniz için teşekkür ederim ve daha fazla Android geliştirme rehberi için beğenmeyi ve abone olmayı unutmayın!
Yorum Yap