Custom ListView Filtreleme | Android

C

Mobil cihazlarda yapılan listelemeler bazı durumlarda çok uzun olabiliyor. Örneğin rehber bunlardan bir tanesi. Bu gibi durumlarda, uygulamanın kullanılabilirliğini arttırmak için filtreleme yardımımıza yetişiyor.

Custom ListView ya da hazır gelen ListView için yapacağımız filtreleme işleminin farkı yok. Aşağıdaki çözümü (uygun şekilde) iki tür ListView için de kullanmak mümkün.

Öncelikle filtreleme işlemi için bir ListView’a ve filtrelemeyi sağlayacak bir EditText’e ihtiyacımız var. Bu bileşenleri LinearLayout olarak oluşturduğumuz yeni bir .xml’e ekleyelim. Adı filterable_list.xml olan dosyanın son hali:

[code lang=”xml”]

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<EditText android:id="@+id/filter"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="type to filter"
android:inputType="text"
android:maxLines="1"/>

<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>

</LinearLayout>
[/code]

Filtre işlemlerini içeren Activity’nin ListActivty’den extend edilmesi gerekiyor. Temel olarak; TextWatcher aracılığıyla EditText’in değişimini takip ederek, Adapter üzerinden filtre işlemini ListView’a yansıtacağız.

Adına ListFilterActivity verdiğimiz sınıfın son hali aşağıdaki gibi olacak:

[code lang=”java”]

public class ListFilterActivity extends ListActivity {

private EditText filterText = null;
ArrayAdapter<String> adapter = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.filterable_listview);

filterText = (EditText) findViewById(R.id.search_box);
filterText.addTextChangedListener(filterTextWatcher);

this.adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myStrings);
setListAdapter(adapter);

}

private TextWatcher filterTextWatcher = new TextWatcher() {

public void onTextChanged(CharSequence s, int start, int before,
int count) {
adapter.getFilter().filter(s);
}

@Override
public void afterTextChanged(Editable s) {

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

};

private String[] myStrings = { "Ankara", "Trabzon", "Manisa", "Denizli"  };

}

[/code]

İşlemler bu kadar.
Soru ve katkı için yorumları kullanabilirsiniz.

4 Yorum

Oğulcan

Arşivler

Kategoriler