Android programlamada activiyler arası data geçişi için bundle kullanılır. Bundle yardımıyla bir activitye de mevcut olan data başka bir activitye gönderilebilir. Bir önceki yazımda edittext ten alınan numaranın aranması örnek uygulamasını yapmıştık . Bundle kullanımını öğrenmek için bu uygulama üzerinden değişiklik yapacağız.
Örnek uygulamamız çalıştığında edittexte bir numara gireceğiz . Butona tıkladığımızda başka bir activity açılacak ve buradaki call butonuna tıkladığımızda bir önceki activityden gelen ve buradaki textviewda görünen numarayı arayacak. Bunun için öncelikle yeni bir xml ve java classı oluşturacağız . Bunlara other.xml ve other.java isimlerini verdim.
other.xml de bir adet textview ve butonumuzu ekliyoruz. Gerekli isimlendirmeleri yaptıktan sonra other.xml içeriği şu şekilde olur :
other.xml :
<?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" >
<TextView
android:id="@+id/tvNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/btnCall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dial" />
</LinearLayout>
MainActivity.java :
package com.example.dialnumber;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText edtNumber ;
Button btnDial ;
private Intent intent;
private Bundle bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtNumber = (EditText)findViewById(R.id.edtNumber);
btnDial = (Button)findViewById(R.id.btnDial);
btnDial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent("com.example.dialnumber.OTHER");
bundle = new Bundle();
bundle.putString("number",edtNumber.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
}
});
}
}
Other.java içeriği ise şu şekildedir :
package com.example.dialnumber;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class other extends Activity {
TextView tvNumber ;
Button btnCall ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
tvNumber = (TextView)findViewById(R.id.tvNumber);
btnCall = (Button)findViewById(R.id.btnCall);
Bundle datas = getIntent().getExtras();
tvNumber.setText(datas.getString("number"));
btnCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialNumber();
}
});
}
public void dialNumber(){
if (!tvNumber.getText().toString().equals("")){
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+tvNumber.getText().toString()));
startActivity(callIntent);
} catch (ActivityNotFoundException activityException) {
Log.e("Dialing Example", "Call failed");
}
}else {
Toast.makeText(getApplicationContext(),"Numara Giriniz",Toast.LENGTH_SHORT).show();
}
}
}
Örneğin mainactivityden other acitivitye bir data göndereceğiz . Bunun için Bundle değişkeni ve datanın gönderileceği bir intent oluşturulur. Daha sonra data herhangi bir keyword ile birlikte , örneğin datanın String türde olmasına göre putString komutuyla bundle a konulur. Bundle putExtras ile birlikte intente geçirilir. StartActivity ile de activity başlatılır. Gönderilecek datanın türüne göre String dışında birçok put komutu vardır.(ArrayList, Double ...)
Datanın alınacağı activityde ise intente aktarılan data get komutu ile alınır.
AndroidManifest.xml içeriği :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dialnumber"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.dialnumber.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=".other"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.example.dialnumber.OTHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
Bu şekilde bundle ile activityler arası geçiş yapılmaktadır. Uygulamamızı çalıştırırsak görüntüleri şu şekilde olur :


MainActivitydeki Edittextten diğer activitydeki textview a numaranın aktarılması. ilk ekranda dial butonuna tıklandıgında diğer activitye geçiş yapılır. ikinci activityde dial butonuna tıklandıgında ise textviewda görülen numarayı arar.
Uygulamayı buradan indirebilirsiniz.