Firebase数据库更改数据通过RecyclerView Adapter Android进行通知

时间:2017-01-17 19:08:31

标签: android firebase firebase-realtime-database

数据结构:

data structure

factoryConfigs.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot != null && dataSnapshot.getValue() != null){
                Log.i("onChildAdded", "onChildAdded " + dataSnapshot.toString());
                try{
                    FactoryConfig config = dataSnapshot.getValue(FactoryConfig.class);
                    configs.add(config);
                    mFactoryList.scrollToPosition(configs.size());
                    mAdapter.notifyItemInserted(configs.size());

                }catch (Exception e){
                    Log.e("FactoryFragment", e.getMessage());
                }
            }

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            Log.i("datachange", "dataChanged" + dataSnapshot.toString());

            mAdapter.notifyDataSetChanged();

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

我的factory_line数据会根据需要增加。 我需要知道数据库必须更改,以便我可以修改我的列表并通知适配器。我无法弄清楚如何找到数据已更改的适配器位置。

2 个答案:

答案 0 :(得分:0)

获取适配器中项目的位置并应用use notifyItemChanged(int position)。

答案 1 :(得分:0)

我的建议是使用FirebaseRecyclerAdapter。 (https://medium.com/android-grid/how-to-use-firebaserecycleradpater-with-latest-firebase-dependencies-in-android-aff7a33adb8b)。现在,每次数据更改时,firebase回收器适配器都会自动更新,您无需致电notify。

在您的情况下:

Query queryReference = factoryConfigs.orderBy("business_name");

FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter(FactoryConfig.class, R.id.recyclerItemLayout, viewHolderClass.Class, queryReference) {

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        FactoryConfig fc = getItem(position);
        //populate recycler accordingly
    }
};

使用上述适配器替换当前适配器