1

それぞれフラグメントを保持する 3 つのタブで構成される Android アプリケーション (最小 API 14) を作成しています。フラグメントの 1 つは、リスト ビュー (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.layout.simple_list_item* に置き換えると、すべてが期待どおりに機能します。

また、モデル (Room) で toString() メソッドをオーバーライドするとこのような問題が解決することも読みましたが、それもうまくいきませんでした。

タイトル(android.R.id.text1)でフィルタリングする方法を理解する助けがあれば大歓迎です。

4

1 に答える 1

0

さて、「標準」のAndroidアダプターで解決策が見つからなかった後、 BaseAdapter を拡張してFilterableを実装するカスタムアダプターを作成することになりました。同じ問題が発生した場合は、ここにいくつかのヒントがあります。

于 2013-07-26T12:17:04.033 に答える