android - 为什么我的 ListView 在向 Firebase 添加新数据后不刷新?

标签 android listview firebase

将字符串推送到 firebase 后,我无法重新加载 ListViewListView 在我重新启动应用程序时更新。我在我的 ListAdapter 中使用了 notifyDataSetChanged() 函数。这是我正在做的:

myFirebaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d("App",dataSnapshot.getValue().toString());
            names = dataSnapshot.getValue().toString();



            String[] planets = new String[] { names, "Venus", "Earth", "Mars",
                    "Jupiter", "Saturn", "Uranus", "Neptune"};
            ArrayList<String> planetList = new ArrayList<String>();
            namesList.addAll( Arrays.asList(planets) );

            // Create ArrayAdapter using the planet list.
            listAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, android.R.id.text1, namesList);

            mainListView.setAdapter(listAdapter);
            listAdapter.notifyDataSetChanged();


        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

最佳答案

这里是 Firebase 工程师,

我建议查看 simple chat example我最近做了(你想做的是详细的 here )或者我们更充实的 Android Chat example ,它们都演示了如何使用模型对象绑定(bind)到 ArrayAdapters 和 ListViews。

TL;DR 是您想要做的更像这样的事情:

// Create instance variables to be used from inside your activity
private ArrayList<Map<String, Object>> mMessages;
private Firebase mRef;

...

// Some time later, instantiate your instance variables
this.mMessages = new ArrayList<Message>();

// Set up ListAdapter
ListAdapter messageAdapter = new ArrayAdapter(this , R.layout.message_layout , mMessages);
this.setListAdapter(messageAdapter);

// Set up Firebase
Firebase.setAndroidContext(this);
this.mRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");

// Add listener to your Firebase database reference
this.mRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        // Create objects and add to ArrayList, which should fire ArrayAdapter methods and update the ListView
        Map<String, Object> data = (Map<String, Object>)dataSnapshot.getValue();
        MainActivity.this.mMessages.add(data);
    }

    ...
    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});

关于android - 为什么我的 ListView 在向 Firebase 添加新数据后不刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079855/

相关文章:

android - 如何在android中存储回复(例如facebook中的评论和quora中的答案)

android - 奇怪的 ClassCastException : ImageView cannot be cast to ListView

创建用户时不允许 Firebase 安全规则

javascript - 使用 $scope.apply() 后点击展开不工作

android - NFC 和 MIME TYPE 区分大小写

Intent 服务中的 Android 警报对话框

android - 找不到与给定名称匹配的资源(在 'colorAccent' 处,值为 '@color/Accent' )

android - (优先)如何在 FragmentActivity 中对特定 ListView 使用 setListAdapter

android - 获取android相机设备的视角

ios - 如何在一次查询中检索多个数据 Firebase