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成长之路(8)——ListView优化和自定义Adapter的应用
- Android移动应用界面的模板化设计【自定义BaseActivity】
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- 移动应用界面设计模式 - 搜索、排序、筛选
- kotlin Recycler View 简单应用自定义adapter ,包括接口
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- 网页设计之CSS @font-face应用网页字体自定义
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
- 【Android应用开发技术:用户界面】自定义View类设计
- 移动应用设计:应用内搜索和业务转化
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- ASP.NET的适配器设计模式(Adapter)应用详解
- Android UI 设计(10):ListView 控件和自定义 Adapter(四)
- 站内搜索应用的方案设计的分析和总结
- 黑马程序员:ClassLoader介绍、自定义ClasLoader的应用及模板方法设计模式
- 自定义通信协议设计之TLV编码应用
- Java设计模式之适配器模式(Adapter)在Android中的应用
- 移动应用界面设计模式 - 搜索、排序、筛选
- 移动应用界面设计模式 - 搜索、排序、筛选