在我的應用程序中,我有一個用戶已安裝應用程序的列表,並且希望爲該列表創建一個搜索功能。現在,這裏是我的編碼:如何爲搜索功能制定自定義過濾器
// create new adapter
AppInfoAdapter adapter = new AppInfoAdapter(this, Utilities.getInstalledApplication(this), getPackageManager());
// load list application
mListAppInfo = (ListView)findViewById(R.id.lvApps);
// set adapter to list view
mListAppInfo.setAdapter(adapter);
// search bar
inputSearch = (EditText) findViewById(R.id.inputSearch);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
// Drag_and_Drop_App.this.adapter.getFilter().filter(cs);
Drag_and_Drop_App.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
,當我在這條線得到一個錯誤出現該問題:
Drag_and_Drop_App.this.adapter.getFilter().filter(cs);
它說,「用getFilter()」不是我的底座適配器定義,這是這樣的:
package com.example.awesomefilebuilderwidget;
IMPORTS
public class AppInfoAdapter extends BaseAdapter {
private Context mContext;
private List mListAppInfo;
private PackageManager mPackManager;
public AppInfoAdapter(Context c, List list, PackageManager pm) {
mContext = c;
mListAppInfo = list;
mPackManager = pm;
}
@Override
public int getCount() {
return mListAppInfo.size();
}
@Override
public Object getItem(int position) {
return mListAppInfo.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// get the selected entry
ApplicationInfo entry = (ApplicationInfo) mListAppInfo.get(position);
// reference to convertView
View v = convertView;
// inflate new layout if null
if(v == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
v = inflater.inflate(R.layout.layout_appinfo, null);
}
// load controls from layout resources
ImageView ivAppIcon = (ImageView)v.findViewById(R.id.ivIcon);
TextView tvAppName = (TextView)v.findViewById(R.id.tvName);
TextView tvPkgName = (TextView)v.findViewById(R.id.tvPack);
// set data to display
ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager));
tvAppName.setText(entry.loadLabel(mPackManager));
tvPkgName.setText(entry.packageName);
// return view
return v;
}
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
return filter;
}
}
我添加了最後一部分「公共過濾器...」從四處張望在stackoverflow上。但現在,我需要一個自定義篩選器進行搜索。我可以使用什麼? (我已經嘗試的一件事,但它不工作)
如果您顯示的是項目列表,那麼擴展'ArrayAdapter'而不是'BaseAdapter'可能會有意義。 'ArrayAdapter'已經實現了'Filterable'接口,所以通過遷移你可以免費獲得一個基本的過濾器。另外,特別是如果你需要更多的控制實際的過濾邏輯,你可以實現你自己的'過濾器'。關於如何做到這一點,有不少例子 - [這是一個](http://stackoverflow.com/a/14369336/1029225)。 –