0

私はListView検索機能を備えたものを作ろうとしています。

しかし、私が直面している問題は、filter( CharSequence) を使用した後にフィルター処理されたリストを取得しているにもかかわらず、リスト上のオブジェクトの位置がフィルター前の位置のままであることです。したがって、検索後にアイテムをクリックすると、以前のアイテムで応答します。つまり、リストが更新されません。

私はこのコードを使用しています:

inputSearch.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
    int after) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
    int count) {
        // TODO Auto-generated method stub
        ((SimpleAdapter) PlayListActivity.this.adapter).getFilter().filter(s);
    }

});

入力テキストを入力すると、リストが検索および更新されるため、アイテムをクリックしようとすると、前のアイテムではなくそのアイテムのみが応答します。

4

1 に答える 1

0

filter() メソッドが非同期であることを考慮してください。

独自の FilterListerner オブジェクトで filter(CharSequence 制約) メソッドの代わりに SimpleAdapter.filter(CharSequence 制約、Filter.FilterListener リスナー) メソッドを使用してみてください。フィルターが完了したら、アダプター notifyDataSetChanged() を呼び出して、リストを更新するように通知します。


編集(サンプルコードを追加):

((SimpleAdapter) PlayListActivity.this.adapter).getFilter().filter(s, new Filter.FilterListener() {
        @Override
        public void onFilterComplete(int count) {
               PlayListActivity.this.runOnUiThread(new Runnable() {
                     @Override
                     public void run() {
                         PlayListActivity.this.adapter.notifyDataSetChanged();
                     }
                });
        }
 });
于 2012-10-21T22:48:07.447 に答える