0

私はを持っていて、次のコードで適切に入力されているメソッドをListViewオーバーライドしています。getView'adapter.getfilter()'を使用すると、リストビューは更新されませんが、アダプターではフィルター処理され、NEXTフィルターが実行されたときに' out()'によって適切に表示され、[編集]ボックスにテキストが入力されます。getViewアダプターに影響を与えるフィルターとフィルターを同時にオーバーライドし、次に編集ボックスにテキストを入力するときにフィルターを有効にするにはどうすればよいですか?

final ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
android.R.layout.activity_list_item,stringArray) 
{   @Override
public View getView(int position, View convertView, ViewGroup parent)
    {View  row= super.getView(position, convertView, parent);
        View row=convertView;
if(position==0){
row = mLayoutInflater.inflate(R.layout.list_header, null);
final TextView sectionView = (TextView) row.findViewById(R.id.list_item_section_text);
sectionView.setText(myList.get(position));
} 
else
{row = mLayoutInflater.inflate(R.layout.list_item, null);
final TextView sectionView = (TextView) row.findViewById(R.id.list_item_entry_title);
sectionView.setText(myList.get(position));}
return row;}});

lv.setAdapter(adapter);
for (int i = 0; i < adapter.getCount(); i++) {//displaying properly
pr("adapter list"+adapter.getItem(i));
}
myFilter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) { }
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapter.getFilter().filter(s);
adapter.notifyDataSetChanged();
for (int i = 0; i < adapter.getCount(); i++) {
pr("adapter list before "+         (adapter.getItem(i)));//printing properly but not  
//updated in listview ,sometimes it just displays first few ,even if it should not be
//in filtered result after filtering.    
} }  });
4

1 に答える 1

0

カスタムフィルターを作成することをお勧めします。Filterオブジェクトを拡張し(私は通常、アダプターの内部クラスとして実行します)、フィルター処理を実行します。渡したアイテムのコピーを配列に保存し、そこからフィルタリングします。publishResultsでアダプターをクリアし、フィルター処理されたアイテムをに追加し直します。

于 2012-10-09T19:30:57.450 に答える