2016-10-23 3 views

答えて

6

アップデート:FirebaseUIアダプタは、最近、onDataChanged()というメソッドを持ち、データのロードが完了したときに検出することができます。

source code on githubを参照してください。そこから:

このメソッドは、データベースからの更新が完全に処理されるたびにトリガーされます。最初にこのメソッドが呼び出されると、データがまったく使用できない場合を含めて、初期データがロードされました。次にメソッドが呼び出されるたびに、完全な更新(複数の子アイテムへの更新からなる可能性があります)が完了しました。

ロードインジケータを非表示にしたり(最初のロード後に)、UI要素のバッチ更新を完了するには、通常このメソッドをオーバーライドします。

FirebaseUIサンプルアプリは、その "ロード" インジケータを非表示にするonDataChanged()を上書きします:

public void onDataChanged() { 
    // If there are no chat messages, show a view that invites the user to add a message. 
    mEmptyListMessage.setVisibility(getItemCount() == 0 ? View.VISIBLE : View.GONE); 
} 

オリジナル答え

FirebaseUIリストアダプタは、内部Firebase ChildEventListenerを使用しています。このリスナーは、関連する子イベントに対してのみ起動します。子供がいない場合、イベントは発生しません。

リスナーをアダプタに渡す参照/クエリに追加することで、この状況を検出できます。

DatabaseReference list = mDatabase.child("messages"); 
showSpinner(); 
mAdapter = new FirebaseListAdapter<Message>(......, list) { 
    void populateView(View view, Message message, int position) { 
     // the first message was loaded 
     hideSpinner(); 
    } 
}); 
list.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // the initial data is loaded (even if there was none) 
     hideSpinner(); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.w(TAG, "onCancelled", databaseError.toException()); 
    } 
}); 
+0

onDataChange()メソッドありがとうございました!それは魅力のように働く:D –

関連する問題