如何在FirebaseListAdapter完成时得到通知? [英] How to be notified when FirebaseListAdapter finishes?

查看:184
本文介绍了如何在FirebaseListAdapter完成时得到通知?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是FirebaseListAdapter,我需要显示一个ProgressDialog,但是我不知道如何知道它什么时候加载完成。

  public class TabFragment1 extends ListFragment {
$ b @Override
public view onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
查看rootView = inflater.inflate R.layout.tab_fragment_1,container,false);
ListView eventosView =(ListView)rootView.findViewById(android.R.id.list);
Firebase ref =新的Firebase(// myappurl);
Firebase usersRef =新的Firebase(// myappurl / eventos / users);
Singleton singletonUser = Singleton.getInstance();
setUser(singletonUser);

Firebase ref =新的Firebase(// myappurl / eventos);
FirebaseListAdapter< Evento> mAdapter = new FirebaseListAdapter< Evento>(getActivity(),Evento.class,R.layout.event_row,ref){
@Override
protected void populateView(View view,Evento evento){
((TextView的)view.findViewById(R.id.eventTitle))的setText(evento.getNome());
((TextView)view.findViewById(R.id.eventPlace))。setText(evento.getLocal());
}
};
setListAdapter(mAdapter);
返回mAdapter;


return rootView;


private void setUser(Singleton singletonUser){
singletonUser.getToken();
singletonUser.setUuid();
singletonUser.getUuid();
}


}

何时可以放置ProgressDialog.dismiss()?

解决方案

Firebase基于同步数据的前提。因为这个原因,从来没有真正做过同步的时刻。


$ b 一个位置的初始组数据是一次下载并导致对 onChildAdded() 为每个孩子,后跟一个 onDataChanged()。如果您希望在加载此初始数据时隐藏进度栏,则可以为单个事件注册 ValueEventListener

  ref.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
//初始数据已经加载,隐藏进度条

$ b @Override $ b $ public void onCancelled(DatabaseError firebaseError){


});

在上面的代码片段中,所有的孩子都会被添加到你的 ListView 已经。根据您的使用情况,这可能是隐藏进度条的正确时间,也可能比想要的时间晚。



如果您想知道第一个数据已经被渲染了,你可以用你的适配器注册一个观察者:
$ b $ pre $ adapter_registerDataSetObserver(new DataSetObserver(){
@Override
public void onChanged(){
super.onChanged();
//第一次到这里,隐藏进度条
}

@Override
public void onInvalidated(){
super.onInvalidated();
}
});

只要第一个数据从Firebase到达,您就可以使用这种方法来隐藏进度条。

I'm using the FirebaseListAdapter and I need to display a ProgressDialog, but I don't know how to know when it finishes loading.

    public class TabFragment1 extends ListFragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.tab_fragment_1, container, false);
            ListView eventosView = (ListView) rootView.findViewById(android.R.id.list);
            Firebase ref = new Firebase(//myappurl);
            Firebase usersRef = new Firebase(//myappurl/eventos/users);
            Singleton singletonUser = Singleton.getInstance();
            setUser(singletonUser);

    Firebase ref = new Firebase(//myappurl/eventos);
                    FirebaseListAdapter<Evento> mAdapter = new FirebaseListAdapter<Evento>(getActivity(), Evento.class, R.layout.event_row, ref) {
                        @Override
                        protected void populateView(View view, Evento evento) {
                            ((TextView)view.findViewById(R.id.eventTitle)).setText(evento.getNome());
                            ((TextView)view.findViewById(R.id.eventPlace)).setText(evento.getLocal());
                        }
                    };
                    setListAdapter(mAdapter);
                    return mAdapter;


            return rootView;
        }

private void setUser(Singleton singletonUser){
        singletonUser.getToken();
        singletonUser.setUuid();
        singletonUser.getUuid();
    }


}

When can I place the ProgressDialog.dismiss()?

解决方案

Firebase is built on the premise of synchronizing data. For this reason there is never really a moment when it is done synchronizing.

The initial set of data for a location is downloaded in one go and results in a call to onChildAdded() for each child, followed by a single onDataChanged(). If you want to hide the progress bar when this initial data has loaded, you can register a ValueEventListener for a single event:

ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // the initial data has been loaded, hide the progress bar
    }

    @Override
    public void onCancelled(DatabaseError firebaseError) {

    }
});

In the above snippet, all the children will have been added to your ListView already. Depending on your use-case, this may be the right time to hide the progress bar or it may be later than wanted.

If you want to know when the first data has been rendered, you can register an observer with your adapter:

adapter.registerDataSetObserver(new DataSetObserver() {
    @Override
    public void onChanged() {
        super.onChanged();
        // the first time you get here, hide the progress bar
    }

    @Override
    public void onInvalidated() {
        super.onInvalidated();
    }
});

You could use this approach to hide the progress bar as soon as the first data has arrived from Firebase.

这篇关于如何在FirebaseListAdapter完成时得到通知?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆