布局
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:iconifiedByDefault="false"
android:inputType="textFilter" />
<ListView
android:id="@+id/lv_police"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="#ff0000"
android:dividerHeight="1dp"
android:padding="10dp" />```
initData();
public void onSuccess(int statusCode, String content) {
// TODO Auto-generated method stub
super.onSuccess(statusCode, content);
if (content != null) {
PoliceListBean parseObject = JSON.parseObject(
content, PoliceListBean.class);
if (parseObject.getList() != null) {
mData = parseObject.getList();
mBackData = mData;
}
}
initView
mSearchView = (SearchView) findViewById(R.id.searchView);
lv = (ListView) findViewById(R.id.lv_police);
findViewById(R.id.ib_police_back).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextListener(this);
mSearchView.setSubmitButtonEnabled(true);
mSearchView.setQueryHint("查找");
//mSearchView.setFocusable(false);
lv.setTextFilterEnabled(true);
mAdapter = new MyAdapter();
lv.setAdapter(mAdapter);
自定義Adapter 并添加過(guò)濾
``` private class MyAdapter extends BaseAdapter implements Filterable {
private MyFilter mFilter;
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
convertView = View.inflate(PoliceActivity.this,
R.layout.police_item, null);
}
TextView name = (TextView) convertView
.findViewById(R.id.tv_police_name);
TextView duiName = (TextView) convertView
.findViewById(R.id.tv_police_duizhang);
TextView number = (TextView) convertView
.findViewById(R.id.tv_police_number);
name.setText(mData.get(position).getJwsmc());
duiName.setText(mData.get(position).getDzxm());
number.setText(mData.get(position).getPddys() + "");
return convertView;
}
@Override
public Filter getFilter() {
if (null == mFilter) {
mFilter = new MyFilter();
}
return mFilter;
}
// 自定義Filter類(lèi)
class MyFilter extends Filter {
@Override
// 該方法在子線程中執(zhí)行
// 自定義過(guò)濾規(guī)則
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<ListBean> newValues = new ArrayList<ListBean>();
String filterString = constraint.toString().trim()
.toLowerCase();
// 如果搜索框內(nèi)容為空,就恢復(fù)原始數(shù)據(jù)
if (TextUtils.isEmpty(filterString)) {
newValues = mBackData;
} else {
// 過(guò)濾出新數(shù)據(jù)
for (ListBean str : mBackData) {
if (-1 != str.getJwsmc().toLowerCase()
.indexOf(filterString)) {
newValues.add(str);
}
}
}
results.values = newValues;
results.count = newValues.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
mData = (List<ListBean>) results.values;
if (results.count > 0) {
mAdapter.notifyDataSetChanged(); // 通知數(shù)據(jù)發(fā)生了改變
} else {
mAdapter.notifyDataSetInvalidated(); // 通知數(shù)據(jù)失效
}
}
}
}```
需要重寫(xiě)的兩個(gè)方法,onQueryTextSubmit 是你點(diǎn)擊鍵盤(pán)的搜索二字 會(huì)觸發(fā)的方法 直接return false也行。
onQueryTextChange 你每輸入一個(gè)字符就會(huì)觸發(fā)一次,也會(huì)刷新一次適配器:
``` @Override
public boolean onQueryTextSubmit(String query) {
if (mSearchView != null) {
// 得到輸入管理對(duì)象
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
// 這將讓鍵盤(pán)在所有的情況下都被隱藏
imm.hideSoftInputFromWindow(mSearchView.getWindowToken(), 0); // 輸入法如果是顯示狀態(tài),那么就隱藏輸入法
}
mSearchView.clearFocus(); // 不獲取焦點(diǎn)
}
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
if (TextUtils.isEmpty(newText)) {
// 清楚ListView的過(guò)濾
mAdapter.getFilter().filter("");
// lv.clearTextFilter();
} else {
// 使用用戶(hù)輸入的內(nèi)容對(duì)ListView的列表項(xiàng)進(jìn)行過(guò)濾
// 主要是這句寫(xiě)上就沒(méi)黑框了
mAdapter.getFilter().filter(newText);
// lv.setFilterText(newText);
}
return true;
}```

去除黑色背景
不獲取焦點(diǎn)無(wú)效
實(shí)時(shí)查詢(xún)動(dòng)態(tài)刷新