您的位置:首页 > 移动开发 > Android开发

SearchView的应用,为自定义adapter设计搜索TextFilter

2014-02-20 13:29 543 查看

 


public class SubscribeActivity extends SherlockFragmentActivity implements
OnQueryTextListener, OnItemClickListener, OnItemLongClickListener {
private SearchView mSearchView;
private ListView mListView;
private SubscribeIndexAdapter mAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
//...
mAdapter = new SubscribeIndexAdapter(this, mSubcribeList);
mSearchView = (SearchView) findViewById(R.id.search_view);
mListView = mFooter.getListViewById(R.id.list_view);
mListView.setAdapter(mAdapter);

mListView.setTextFilterEnabled(true);
mListView.setOnItemClickListener(this);
mListView.setOnItemLongClickListener(this);

setupSearchView();
//...
}

private void setupSearchView() {
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextListener(this);
mSearchView.setSubmitButtonEnabled(false);
mSearchView.setQueryHint("搜索");
}

public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
mListView.clearTextFilter();
} else {
mListView.setFilterText(newText.toString());
}
return true;
}

public boolean onQueryTextSubmit(String query) {
return false;
}
}

public class SubscribeIndexAdapter extends BaseAdapter implements Filterable {
private LayoutInflater inflater;
private ArrayList<Subscribe> mSubcribeList;
private MyFilter mFilter;
private ArrayList<Subscribe> mOriginalValues;
private final Object mLock = new Object();

static class ViewHolder {
TextView textView;
ImageView imageView;
ImageView imageView2;
}

public SubscribeIndexAdapter(Context context,
ArrayList<Subscribe> subcribeList) {
mSubcribeList = subcribeList;
inflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
return mSubcribeList.size();
}

@Override
public Object getItem(int position) {
return mSubcribeList.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
//...

return convertView;
}

@Override
public Filter getFilter() {
if (mFilter == null) {
mFilter = new MyFilter();
}
return mFilter;
}

class MyFilter extends Filter {

@Override
protected FilterResults performFiltering(CharSequence prefix) {
FilterResults results = new FilterResults();

if (mOriginalValues == null) {
synchronized (mLock) {
mOriginalValues = new ArrayList<Subscribe>(mSubcribeList);
}
}
if (prefix == null || prefix.length() == 0) {
synchronized (mLock) {
ArrayList<Subscribe> list = new ArrayList<Subscribe>(
mOriginalValues);
results.values = list;
results.count = list.size();
}
} else {
String prefixString = prefix.toString().toLowerCase();

final ArrayList<Subscribe> values = mOriginalValues;

final int count = values.size();

final ArrayList<Subscribe> newValues = new ArrayList<Subscribe>(
count);

for (Subscribe value : values) {
String title = value.title.toLowerCase();

if (title.indexOf(prefixString) != -1) {
newValues.add(value);
}
}

results.values = newValues;
results.count = newValues.size();
}

return results;
}

@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
mSubcribeList = (ArrayList<Subscribe>) results.values;

if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索 ANDROID SearchView
相关文章推荐