package
org.load.searchView;
import
java.util.ArrayList;
import
java.util.List;
import
android.app.Activity;
import
android.os.Bundle;
import
android.support.v4.view.MenuItemCompat;
import
android.text.TextUtils;
import
android.view.Menu;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.BaseAdapter;
import
android.widget.Filter;
import
android.widget.Filterable;
import
android.widget.ListView;
import
android.widget.SearchView;
import
android.widget.Toast;
import
android.widget.SearchView.OnQueryTextListener;
import
android.widget.TextView;
public
class
MainActivity
extends
Activity {
private
List<String> mData =
new
ArrayList<String>();
private
List<String> mBackData;
private
ListView mListView;
private
SearchView mSearchView;
private
MyAdapter mAdapter;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView)
super
.findViewById(R.id.list);
mListView.setTextFilterEnabled(
true
);
mListView.setOnItemClickListener(
new
ItemClick());
initData();
mAdapter =
new
MyAdapter();
mListView.setAdapter(mAdapter);
}
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(MainActivity.
this
, R.layout.item,
null
);
}
TextView show = (TextView) convertView.findViewById(R.id.show);
show.setText(mData.get(position));
return
convertView;
}
@Override
public
Filter getFilter() {
if
(
null
== mFilter) {
mFilter =
new
MyFilter();
}
return
mFilter;
}
class
MyFilter
extends
Filter {
@Override
protected
FilterResults performFiltering(CharSequence constraint) {
FilterResults results =
new
FilterResults();
List<String> newValues =
new
ArrayList<String>();
String filterString = constraint.toString().trim()
.toLowerCase();
if
(TextUtils.isEmpty(filterString)) {
newValues = mBackData;
}
else
{
for
(String str : mBackData) {
if
(-
1
!= str.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<String>) results.values;
if
(results.count >
0
) {
mAdapter.notifyDataSetChanged();
}
else
{
mAdapter.notifyDataSetInvalidated();
}
}
}
}
private
class
QueryListener
implements
OnQueryTextListener {
@Override
public
boolean
onQueryTextSubmit(String query) {
return
true
;
}
@Override
public
boolean
onQueryTextChange(String newText) {
if
(TextUtils.isEmpty(newText)) {
mListView.clearTextFilter();
}
else
{
mListView.setFilterText(newText);
}
return
true
;
}
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
mSearchView = (SearchView) MenuItemCompat.getActionView(menu
.findItem(R.id.search));
mSearchView.setOnQueryTextListener(
new
QueryListener());
return
true
;
}
private
void
initData() {
for
(
int
i =
0
; i <
50
; i++) {
mData.add(
"hello android "
+ i);
}
mBackData = mData;
}
private
class
ItemClick
implements
OnItemClickListener {
@Override
public
void
onItemClick(AdapterView<?> parent, View view,
int
position,
long
id) {
Toast.makeText(MainActivity.
this
, mData.get(position),
Toast.LENGTH_SHORT).show();
}
}
}