2016-12-20 1 views
3

フィルタでBaseAdapterを使用していますが、フィルタの後ろでfilteredItemsの現在のサイズをアクティビティに表示します。ベースダプタでフィルタリング可能なアイテムの現在のサイズを表示します

問題は、私は、アダプタからのフィルタを開始するとき、(私はミリ秒単位で推測)少し時間がかかるように思われる、ある、との活動から、私はこの方法

adapter.getSize() 

を実行したときにそれが与えます私はフィルタの前に数え、後にはない。例えば

@Override 
protected void publishResults(CharSequence constraint,FilterResults results) { 
    // TODO Auto-generated method stub 
    Names = (ArrayList<String>) results.values; 
    notifyDataSetChanged(); 
} 

及び活動から:

adapter.filter().... 
System.out.println(adapter.getSize()); //return wrong count 

2に関する質問:

1)濾過非同期または同期のですか?

2)アクティビティから、フィルタが完了し、notifysetchanged()が完了したことをどのように知ることができますか?このページで示唆したようにインクルードが変更設定通知

PSは、アダプタの内部にある:How to implement getFilter on a BaseAdapter?

+0

あなたがのgetSizeをオーバーライドしませんでした() 2.フィルタはsync 3です。notifysetchangedは表示されたアイテム用ですので、気にする必要はありません。また、終了したら同期するので、興味があれば呼び出すだけで同期します。 – zombie

答えて

1

がいることをしようと、それは私のために素晴らしい作品:

int filtered; 
    View yourView; 
    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
        yourList= (ArrayList<?>) results.values; 
        filtered = yourList.size(); 
        yourView.post(new Runnable() { 
         @Override 
         public void run() { 
          yourView.setText("Total " + filtered); 
         } 
        }); 
        notifyDataSetChanged(); 
       } 
+1

これはそのトリックでした。ありがとう – totothegreat

関連する問題