SearchView簡介
SearchView是Android原生的搜索框控件,它提供了一個用戶界面,用於用戶搜索查詢。w默認是展示一個search的icon,點擊icon展開搜索框。
這裏就不做過多的介紹,本章主要實現本地實時過濾搜索,現在看下效果:
下面直接上代碼:
實體類Bean.java
public class Bean implements Serializable {
private String name;
private String number;
private String code;
public Bean(String name, String number, String code) {
this.name = name;
this.number = number;
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
測試用的SearchViewBeanTestActivity.java
public class SearchViewBeanTestActivity extends AppCompatActivity {
private ListView listView;
private List<Bean> beanList = new ArrayList<>();
private CameraAdapter adapter;
private List<Bean> searchResult = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_view);
initData();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
assert toolbar != null;
toolbar.setTitle("實時搜索");
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
searchResult.clear();
searchResult.addAll(beanList);
listView = (ListView) findViewById(R.id.list_view);
adapter = new CameraAdapter(this,searchResult);
listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(getApplicationContext(), "onQueryTextSubmit:" + query, Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
searchResult.clear();
for (int i = 0; i < beanList.size(); i++) {
if (beanList.get(i).getNumber().contains(newText))
searchResult.add(beanList.get(i));
}
adapter.notifyDataSetChanged();
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
private void initData() {
beanList.clear();
beanList.add(new Bean("實時搜索—1", "12345545", "123456456"));
beanList.add(new Bean("實時搜索—2", "32523454", "789414984 "));
beanList.add(new Bean("實時搜索—3", "3tgrwggd", "789744849"));
beanList.add(new Bean("實時搜索—4", "12312443", "87984949 t"));
beanList.add(new Bean("實時搜索—5", "543513523", "874984848"));
beanList.add(new Bean("實時搜索—6", "454363533", "4897498498"));
beanList.add(new Bean("實時搜索—7", "436TERG33", "848949848"));
beanList.add(new Bean("實時搜索—8", "RTRE34634", "7484894894"));
beanList.add(new Bean("實時搜索—9", "654624WT34", "4848949849"));
beanList.add(new Bean("實時搜索—10", "2442rfewr3", "4784984984"));
beanList.add(new Bean("實時搜索—12", "436TGFDTE", "8949849848"));
beanList.add(new Bean("實時搜索—14 ", "436TGFDTE", "784848949"));
}
}
用到的search_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
android:orderInCategory="100"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="請輸入編號"
app:showAsAction="always" />
</menu>
用到的 search_view.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<ListView
android:id="@+id/list_view"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>
到這裏也就實現了本地實時過濾搜索的效果