notifyDataSetChanged()不在侦听器内部工作

时间:2017-03-27 04:59:41

标签: android firebase firebase-realtime-database android-recyclerview

notifyDataSetChanged()不在侦听器内工作

我有一个子事件监听器,它从Fire-base加载数据,我将数据加载到数组列表中。我需要在数据完全加载时设置适配器。所以我使用单值事件来识别子事件完成,当我尝试在单值事件监听器中设置适配器时,它没有设置适配器。请协助..

以下是我的代码:

注意:我已在oncreate方法中设置了适配器。

  db.addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            bigProgressBar.setVisibility(View.GONE);
            Log.d("value",abc.toString());// returns empty!!
            sampleAdapter.notifyDataSetChanged();
        }

        }


    db.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(final DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot != null) {

                final Handler handler = new Handler();

                handler.post(new Runnable() {
                    @Override
                    public void run() {


                        Events job = dataSnapshot.getValue(Events.class);

                        abc.add( job);





                    }
                });

            }

        }

1 个答案:

答案 0 :(得分:0)

我认为5.0 5.1 5.2 5.3 5.4 5.5 Half way done! 5.6 5.7 5.8 5.9 6.0 All the way done! 无效的原因是因为它在notifyDataSetChanged()之前被调用,所以在将数据添加到abc.add( job)之前更新适配器。

如果您使用的是ArrayList,我建议您查看此库。 https://github.com/firebase/FirebaseUI-Android

在将数据加载到所有RecyclerView后更新适配器。

ArrayList

请注意,db.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { bigProgressBar.setVisibility(View.GONE); for(DataSnapshot child : dataSnapshot.getChildren()) { Events event = child.getValue(Events.class); abc.add(job); } sampleAdapter.notifyDataSetChanged(); } } 是包含db数据的根节点。