我一直在试图过滤/搜索适配器适配器与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