我一直在試圖過濾/搜索適配器適配器與mSearch EditText。我正在尋求幫助實施getFilter()等。SearchView過濾器列表視圖
此活動正在顯示內容列表。 mSearch放置在列表上方,我想過濾/更新列表爲某人類型。
讓我知道你是否需要特定的代碼或更多信息。先謝謝你!
public class MainActivity extends FragmentActivity {
private SearchView mSearch;
private List<Model> mMain = new ArrayList<Model>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public class MainFragment extends Fragment implements SearchView.OnQueryTextListener {
private ListView mListView;
private Adapter mAdapter;
public boolean onQueryTextChange(String query) {
if (mAdapter != null) {
mAdapter.getFilter().filter(query.toString());
}
return false;
}
public boolean onQueryTextSubmit(String query) {
onQueryTextChange(query);
return false;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.main_user_list_row, container, false);
mListView = (ListView) findViewById(R.id.listView);
mAdapter = new Adapter();
mListView.setAdapter(mAdapter);
mListView.setAdapter.setTextFilterEnabled(true);
mSearch.setOnQueryTextListener((SearchView.OnQueryTextListener) mContext);
return rootView;
}
public class Adapter extends BaseAdapter implements Filterable {
@Override
public int getCount() {
return mMain.size();
}
@Override
public Object getItem(int position) {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(mContext, R.layout.main_user_list_row, null);
if (mContext != null && mMain.get(position) != null) {
TextView mPosition = (TextView) view.findViewById(R.id.position);
mPosition.setText("...");
}
return view;
}
@Override
public Filter getFilter() {
return new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mMain = (List<Model>) results.values;
Adapter.this.notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Contest> filteredResults = getFilteredResults(constraint);
FilterResults results = new FilterResults();
results.values = filteredResults;
return results;
}
};
}
}
}
我在getFilteredResults收到此錯誤
Cannot resolve method 'getFilteredResults(java.lang.CharSequence)'
我也是在mSearch.setOnQueryTextListener((SearchView.OnQueryTextListener)mContext)得到這個錯誤;
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{...MainActivity}: java.lang.ClassCastException: ...InDraftActivity cannot be cast to android.widget.SearchView$OnQueryTextListener
java.lang.ClassCastException: ...MainActivity cannot be cast to android.widget.SearchView$OnQueryTextListener
SOLUTION
我通過實施,而不是片段活性的OnQueryTextListener,固定的搜索查看錯誤。
performFiltering需要看起來像
List<Contest> filteredResults = new ArrayList<Contest>();
FilterResults results = new FilterResults();
results.values = filteredResults;
results.count = filteredResults.size();
見標記答案。
什麼是getFilteredResults,你有沒有定義它?因爲我之前已經實現了這種類型的代碼,並且在 – Ogen
之前從未使用過該方法,所以我刪除了getFilteredResults,而現在mMain.size()在publishResults期間返回爲null。 – localhost
那麼如果你刪除了那個方法,那麼現在分配給'filteredResults'的是什麼?不是null? – Ogen