Android 如何为名字和姓氏应用搜索筛选器
我想在联系人应用程序中应用Android mobile的搜索过滤器。例如,有一个名为Aakash sharma的联系人。在搜索栏中,我按下Aakash中的starting-later,即aa,空格后按last-name,即sh。请查收附件,以便您能理解面糊。请帮帮我。事先非常感谢 这是我的密码Android 如何为名字和姓氏应用搜索筛选器,android,mysql,sqlite,Android,Mysql,Sqlite,我想在联系人应用程序中应用Android mobile的搜索过滤器。例如,有一个名为Aakash sharma的联系人。在搜索栏中,我按下Aakash中的starting-later,即aa,空格后按last-name,即sh。请查收附件,以便您能理解面糊。请帮帮我。事先非常感谢 这是我的密码 EditText search_filter = (EditText) stn_dialog .findViewById(R.id.et_search_ds);
EditText search_filter = (EditText) stn_dialog
.findViewById(R.id.et_search_ds);
ListView listView = (ListView) stn_dialog
.findViewById(R.id.lv_search_ds);
stn_adapter = new ListAdapterStation(
RetailerSelectionActivity.this, R.layout.station_list,
station_list);
filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
// Filter from my adapter
stn_adapter.getFilter().filter(s);
// Update my view
stn_adapter.notifyDataSetChanged();
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
};
search_filter.addTextChangedListener(filterTextWatcher);
listView.setAdapter(stn_adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int pos, long id) {
stn_dialog.dismiss();
RetailerSelectionDTO retailerSelectionDTO = (RetailerSelectionDTO) station_list
.get(pos);
station_name = retailerSelectionDTO.getStation_name_c();
station_id = retailerSelectionDTO.getStation_id_c();
btn_station.setText(station_name);
btn_retailer.requestFocus();
new GetRetailerTask().execute();
}
});
EditText搜索\u过滤器=(EditText)stn\u对话框
.findviewbyd(R.id.et\u search\u ds);
ListView ListView=(ListView)stn_对话框
.findviewbyd(R.id.lv\u search\u ds);
stn_适配器=新列表适配器站(
RetailerSelectionActivity.this,R.layout.station\u列表,
车站(单位名单),;
filterTextWatcher=新的TextWatcher(){
公共无效后文本已更改(可编辑){
//从我的适配器中筛选
stn_适配器.getFilter().filter;
//更新我的视图
stn_适配器。notifyDataSetChanged();
}
更改前的公共无效(字符序列、整数开始、,
整数计数,整数后){
}
public void onTextChanged(字符序列,int start,
前整数,整数计数){
}
};
搜索\u filter.addTextChangedListener(filterTextWatcher);
setAdapter(stn_适配器);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
stn_dialog.discouse();
RetailerSelectionDTO RetailerSelectionDTO=(RetailerSelectionDTO)站点列表
.get(pos);
station_name=retailerSelectionDTO.getStation_name_c();
station_id=retailerSelectionDTO.getStation_id_c();
btn_station.setText(station_name);
btn_retailer.requestFocus();
新建GetRetailerTask().execute();
}
});
适配器是
private class ListAdapterStation extends ArrayAdapter {
/**
* List of Procedure
*
*/
private ArrayList<RetailerSelectionDTO> items;
/**
* Application Context
*/
private Context mContext;
/**
* List of Procedure
*/
private ArrayList<RetailerSelectionDTO> originalItems = new ArrayList<RetailerSelectionDTO>();
private ListAdapterItemFilter filter;
public ListAdapterStation(Context context, int textViewResourceId,
List<RetailerSelectionDTO> list) {
super(context, textViewResourceId, list);
this.items = (ArrayList<RetailerSelectionDTO>) list;
this.mContext = context;
cloneItems((ArrayList<RetailerSelectionDTO>) list);
}
/**
* cloneItems @
*
* @param list
*/
protected void cloneItems(ArrayList<RetailerSelectionDTO> list) {
for (Iterator<RetailerSelectionDTO> iterator = list.iterator(); iterator
.hasNext();) {
RetailerSelectionDTO p = iterator.next();
originalItems.add(p);
}
}
/**
* Get Count
*/
@Override
public int getCount() {
return items != null ? items.size() : 0;
}
/**
* Get Item
*
* @param item
* @return TranUserProcedureDTO
*/
@Override
public RetailerSelectionDTO getItem(int item) {
RetailerSelectionDTO p = null;
p = (items != null ? items.get(item) : null);
return p;
}
/**
* Get View
*
* @param position
* @param convertView
* @param parent
* @return View
*/
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
try {
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.station_list, null); // --CloneChangeRequired(list_item)
} else {
view = convertView;
}
RetailerSelectionDTO retailerSelectionDTO = items.get(position);
if (retailerSelectionDTO != null) {
TextView textView = (TextView) view
.findViewById(R.id.tv_station);
textView.setText(retailerSelectionDTO.getStation_name_c());
}
} catch (Exception e) {
e.printStackTrace();
}
return view;
}
public Filter getFilter() {
if (filter == null) {
filter = new ListAdapterItemFilter();
}
return filter;
}
private class ListAdapterItemFilter extends Filter {
protected FilterResults performFiltering(CharSequence prefix) {
/**
* Initiate our results object
*/
FilterResults results = new FilterResults();
/**
* No prefix is sent to filter by so we're going to send back
* the original array
*/
if (prefix == null || prefix.length() == 0) {
results.values = originalItems;
results.count = originalItems.size();
} else {
/**
* Compare lower case strings
*/
String prefixString = prefix.toString().toLowerCase();
final ArrayList<RetailerSelectionDTO> filteredItems = new ArrayList<RetailerSelectionDTO>();
final ArrayList<RetailerSelectionDTO> localItems = new ArrayList<RetailerSelectionDTO>();
localItems.addAll(originalItems);
final int count = localItems.size();
for (int i = 0; i < count; i++) {
final RetailerSelectionDTO item = localItems.get(i);
final String itemName = item.getStation_name_c()
.toLowerCase();
if (itemName.contains(prefixString)) {
filteredItems.add(item);
} else {
}
}
results.values = filteredItems;
results.count = filteredItems.size();
}
return results;
}
@SuppressWarnings("unchecked")
@Override
/**
*
*/
protected void publishResults(CharSequence prefix,
FilterResults results) {
/**
* noinspection unchecked
*/
final ArrayList<RetailerSelectionDTO> localItems = (ArrayList<RetailerSelectionDTO>) results.values;
notifyDataSetChanged();
clear();
/**
* Add the items back in
*/
for (Iterator iterator = localItems.iterator(); iterator
.hasNext();) {
RetailerSelectionDTO gi = (RetailerSelectionDTO) iterator
.next();
add(gi);
}
}
}
}
私有类ListAdapterStation扩展了ArrayAdapter{
/**
*程序清单
*
*/
私有ArrayList项;
/**
*应用程序上下文
*/
私有上下文;
/**
*程序清单
*/
private ArrayList originalItems=new ArrayList();
私有ListAdapterItemFilter;
公共ListAdapterStation(上下文,int textViewResourceId,
(列表){
super(上下文、textViewResourceId、列表);
this.items=(ArrayList)列表;
this.mContext=上下文;
克隆种((ArrayList)列表);
}
/**
*克隆菌@
*
*@param列表
*/
受保护的空克隆项(ArrayList列表){
for(迭代器迭代器=list.Iterator();迭代器
.hasNext();){
RetailerSelectionDTO p=iterator.next();
添加(p);
}
}
/**
*数一数
*/
@凌驾
public int getCount(){
返回项!=null?项。大小():0;
}
/**
*获取项目
*
*@param项目
*@return-transuserproceduredto
*/
@凌驾
公共零售商选择getItem(整数项){
RetailerSelectionDTO p=null;
p=(items!=null?items.get(item):null);
返回p;
}
/**
*查看
*
*@param位置
*@param-convertView
*@param父级
*@返回视图
*/
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
试一试{
if(convertView==null){
LayoutInflater vi=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
视图=vi.充气(R.布局.站列表,空);/--需要关闭更改(列表项)
}否则{
视图=转换视图;
}
RetailerSelectionDTO RetailerSelectionDTO=items.get(位置);
如果(retailerSelectionDTO!=null){
TextView TextView=(TextView)视图
.findviewbyd(R.id.tv_station);
textView.setText(retailerSelectionDTO.getStation_name_c());
}
}捕获(例外e){
e、 printStackTrace();
}
返回视图;
}
公共过滤器getFilter(){
if(filter==null){
过滤器=新的ListAdapterItemFilter();
}
回流过滤器;
}
私有类ListAdapterItemFilter扩展了筛选器{
受保护的筛选器结果执行筛选(字符序列前缀){
/**
*启动我们的结果对象
*/
FilterResults results=新的FilterResults();
/**
*没有将前缀发送给筛选依据,因此我们将发送回
*原始数组
*/
if(prefix==null | | prefix.length()==0){
结果。值=原始值;
results.count=originalItems.size();
}否则{
/**
*比较小写字符串
*/
字符串prefixString=prefix.toString().toLowerCase();
final ArrayList filteredItems=新的ArrayList();
final ArrayList localItems=新的ArrayList();
localItems.addAll(originalItems);
最终整数计数=localItems.size();
for(int i=0;i for (int i = 0; i < count; i++) {
final RetailerSelectionDTO item = localItems.get(i);
final String itemName = item.getStation_name_c()
.toLowerCase();
final String[] componentsItemName = itemName.split(" ");
final String[] componentsPrefixString = prefixString.split(" ");
// now here, you should match each word of prefix with each word of itemname
}