اکشن بار دارای Search View
در اندروید نسخه Android 3.0 ویوی جستجو یا SearchView به نوار ابزار اضافه اضافه شد
از این ویوی جستجو می توان برای جستجوی مطالب درlist view استفاده کرد
در زیر مراحل اجرای ویوی جستجو در list view رو براتون نوشتم
اولین کار اضافه کردن search menu
یک فایل سورس منو را با آیتم از فهرست جستجو ایجاد می کنیم(می خواهیم هنگامی که روی منوی جستجو کلیک می کنیم، ویجت جستجو در نوار ابزارنمایان شود)
در زیر مثالی از منو که ایجاد کردم رو می تونید ببینید
(res / menu / search_menu.xml)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="Search"
android:icon="@drawable/search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
در مورد منوی بالا صفت collapseActionView به SearchView این امکان رو میده که گسترش پیدا کنه
به طوری که همه ی اکشن بار رو پوشش بده
در مرحله ما میاییم و پیکربندی جستجو را ایجاد می کنیم
پیکربندی قابل جستجو نحوه رفتار SearchView را تعریف می کند
در زیر مثالی از فایل پیکربندی قابل جستجو رو میتونید مشاهده کنید
res/xml/searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable
xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="Search friend">
</searchable>
سپس با استفاده از برچسب <meta-data> این ویژگی را به یک فعالیت مرتبط اضافه کنید
<activity
android:name=".ui.FriendListActivity"
android:screenOrientation="portrait"
android:configChanges="orientation"
android:theme="@style/Theme.Yello"
android:windowSoftInputMode="stateHidden"
android:launchMode="singleTask"
android:parentActivityName=".ui.SensorDetailsActivity">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable">
</meta-data>
</activity>
من می خوام در برنامه خودم SearchView را به FriendListActivity اضافه کنم
menu و SearchableConfiguration را به فعالیت اضافه می کنم
پیکربندی قابل جستجو یا searchable configuration را با کلاس SearchView در کلاس activity مرتبط می کنم
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search_menu, menu);
SearchManager searchManager = (SearchManager)
getSystemService(Context.SEARCH_SERVICE);
searchMenuItem = menu.findItem(R.id.search);
searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.
getSearchableInfo(getComponentName()));
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(this);
return true;
}
همان طوری که در بالا میبینید SearchView رو به activity اضافه شده کردم
اما هنوز جستجوی ما کارایی ندارد
اضافه کردن قابلیت جستجو
اجرای SearchView.OnQueryTextListener در فعالیت ، اکنون باید دو روش جدید را بکار بگیریم
public boolean onQueryTextSubmit(String query)
public boolean onQueryTextChange(String newText)
این رابط ها در SearchView به رویدادهای تغییر متن گوش می دهند
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
friendListAdapter.getFilter().filter(newText);
return true;
}
در اینجا تابع onQueryTextChange فیلتر را با آداپتور لیست انجام می دهد ، برای انجام فیلتر ، آداپتور نیاز به پیاده سازی رابط Filterable دارد
Filterable adapter
در پروژه اومدم و از BaseAdapter با اجرای رابط Filterable استفاده کردم
در اینجا من کلاس فیلتر سفارشی FriendFilter را برای انجام فیلتر تعریف کرده ام ،
لیست را مطابق نام وارد شده در SearchView فیلتر می کنم
من دو لیست آرایه را در اینجا تعریف کرده ام
یکی برای نمایش در List View و دیگری برای فیلتر (original list)
private ArrayList<User> friendList;
private ArrayList<User> filteredList;
قابلیت جستجو اکنون در حال آماده به کار می باشد
درتصویر زیر مثالی از لیست جستجو رو می تونید ببینید