4

カスタム クラスの ArrayAdapter を拡張しました。toString()私のクラスは、検索クエリに使用するフィールドをオーバーライドして返します。

これは私のフィルターコードです:

productItemAdapter.getFilter().filter(filterText.toLowerCase());

これは私のtoString()コードです:

return name.toLowerCase();

フィルタリングは機能しています (正しい数の要素が返されます) が、それは間違った要素です。検索に一致する要素ではなく、リストの最初の要素が常に表示されます...

4

1 に答える 1

10

私はまったく同じ問題を抱えていましたが、(私のように) これを実装しようとしたときにドキュメントを読まなかったと思います。

オブジェクトの配列を ArrayAdapter に渡し、その後その配列をスーパー コンストラクターに渡しました。

私が犯した間違いは次のとおりです。渡された配列への参照を保存し、そのgetView()配列を使用してメソッド内のアイテムを描画しました。

 public SimpleAdapter( Context context, List< MyType > values )
 {
    super( context, R.layout.rowlayout, values );
    this.context = context;
    this.values = values;
 }

  @Override
  public View getView( int position, View convertView, ViewGroup parent )
  {
    // ...
    MyType myType = values.get( position );
    // ...
  }

私がすべきgetItem()だったことは、ArrayAdapter クラスで呼び出されます。

  MyType myType = getItem( position );

それを美しく修正したのは、後から考えるとかなり明らかです。

-(e)

于 2012-11-22T10:30:27.843 に答える