我正在编写一个android应用程序(Min API 14),它由3个选项卡组成,每个选项卡包含一个片段。其中一个片段包含列表视图(列表视图项定义为simple_list_item_2)和搜索视图。现在,我正在尝试根据房间的名称(房间是我的型号)过滤列表视图中的数据
protected SearchView searchView;
protected ListView view;
protected List<Room> rooms;
protected ArrayAdapter<Room> roomAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(getLayoutId(), container, false);
view = (ListView)rootView.findViewById(getListViewId());
searchView = (SearchView)rootView.findViewById(R.id.rooms_search_view);
view.setTextFilterEnabled(true);
....
roomAdapter = new ArrayAdapter<Room>(this.getActivity(), android.R.layout.simple_list_item_2, rooms){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
if(convertView == null){
LayoutInflater inflater =
(LayoutInflater)getActivity().getApplicationContext().
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = (View)inflater.inflate(android.R.layout.simple_list_item_2, null);
}else{
row = (View)convertView;
}
Room data = rooms.get(position);
TextView v = (TextView) row.findViewById(android.R.id.text1);
v.setText(data.getName());
v = (TextView) row.findViewById(android.R.id.text2);
v.setText(data.getPhone());
return row;
}
};
view.setAdapter(roomAdapter);
....
return rootView;
}
@Override
public boolean onQueryTextChange(String newText) {
roomAdapter.getFilter().filter(newText);
return true;
}
问题是搜索结果与在搜索视图中输入的输入毫无关联。当我将*android.R.layout.simple_list_item_2*替换为*android.R.llayout.simple _list_iitem*时,一切都如预期。
我还读到,在我的模型(Room)中重写toString()方法可以解决这样一个问题,但这也没用。
如有任何关于如何按标题过滤(android.R.id.text1)的帮助,我们将不胜感激。
好吧,在我找不到任何使用"标准"android适配器的解决方案后,我最终编写了一个自定义适配器,该适配器扩展了BaseAdapter并实现了Filterable。如果你遇到同样的问题,你可以在这里找到一些提示。