Android Uygulamamıza Arama Fonksiyonu Ekleme

Bu yazımızda Android uygulamamıza arama fonksiyonunu nasıl ekleyip kullanacağımızı öğreneceğiz. Bu yazıyı anlayabilmek için Android’de sadece Hello World yazısını yazdırabilmemiz yeterli. Uygulamamızda arama yapmak istediğimiz pencerenin .java dosyasında onSearchRequested(); metodu çalışınca arama penceresi açılıyor. Peki biz kullanıcının girdiği String değeri nasıl alacağız. Öncelikle yeni projemizi açalım.

 

 

Şimdi Android Manifest ve xml dosyalarının düzenlenmesini inceleyelim.

Öncelikle main.xml dosyamıza buton ekleyelim. Örnek buton:

<Button android:text="Trandroid Arama Örneği"
android:id="@+id/searchbutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
	android:layout_gravity="center_horizontal"/>

/res/xml/ dosyasının içinde oluşturduğum search.xml
Bu dosyamızda arama çubuğunda yazmasını istediğimiz ipucu yazımızı ve arama penceresi açılınca yazılmasını istediğimiz başlığı yazıyoruz.

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_label" // values/strings.xml dosyasının içinde
android:hint="@string/search_hint"/> //bu iki değişkeni tanımlayıp değer atıyoruz.

Android Manifest dosyamız:
Android Manifest dosyasındaki ikinci intent filter kısmını ve meta data kısmını arama çubuğunun açılması ve düzenlenmesi için yazıyoruz.

<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter/>
<meta-data android:name="android.app.searchable"
android:resource="@xml/search" />

Arama yaptığımız classta onSearchRequested(); metodu aynı classın onCreate() metodunu çağıracak. Dolayısıyla bizim onCreate metodumuzun hemen altında arama query’sini almamız, aramamızı yapmamız lazım. Aşağıdaki kodu incelersek daha anlaşılır olacaktır.

package com.trandroid.ornek;

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

public class OrnekArama extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Intent intent = getIntent();
		if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
			String query = intent.getStringExtra(SearchManager.QUERY);
			if (query != null) {
				Intent intentt = new Intent(this, AramaYap.class);
				intentt.putExtra("query", query);
				startActivity(intentt);
			}
		}
		Button search = (Button) findViewById(R.id.searchbutton);
		search.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				onSearchRequested();
			}
		});
	}
}

Butona tıkladığımız zaman onSearchRequested(); metodu çalışacak. Kullanıcıdan query’i alacak ve onCreate metodunu çağıracak. onCreate metodunun hemen altındaki if sorgunun onSearchRequested(); metondundan mı geldiğini sorgular. Eğer true dönerse getStringExtra(SearchManager.QUERY); metodu ile girilen stringi alıyoruz. Devamında ise eğer yeni class’a ihtiyaç duyulursa alınan String’le işlem yapmak istediğimiz class’a yönlendiriyoruz.  putExtra()  metoduyla gönderdiğimiz String’i  getIntent().getExtra().getString()   metoduyla yeni classımızdan çağırabiliriz.

Her türlü soru ve eleştirinizi yorum olarak bize iletebilirsiniz. İyi çalışmalar.
Kaynak: trandroid.com


Bir Cevap Yazın