【问题标题】:Filtering listview data of simple_list_item_2 items using searchview and arrayadapter使用 searchview 和 arrayadapter 过滤 simple_list_item_2 项的列表视图数据
【发布时间】:2013-07-22 23:48:52
【问题描述】:

我正在编写一个 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* 替换 *android.R.layout.simple_list_item_2* 时,一切都按预期工作。

我还读到在我的模型(房间)中覆盖 toString() 方法可以解决这样的问题, 但这也没有用。

任何有关如何按标题(android.R.id.text1)过滤的帮助将不胜感激。

【问题讨论】:

    标签: fragment filtering android-arrayadapter listviewitem searchview


    【解决方案1】:

    好吧,在我找不到任何使用“标准”android 适配器的解决方案后,我最终编写了一个自定义适配器,它扩展了 BaseAdapter 并实现了 Filterable。 如果遇到同样的问题,可以在here找到一些提示。

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 1970-01-01
      • 2012-11-14
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 2015-10-02
      • 2011-07-12
      相关资源
      最近更新 更多