【问题标题】:Refresh Firebase data on android listview在 android listview 上刷新 Firebase 数据
【发布时间】:2017-04-28 21:00:52
【问题描述】:

在我的 android 应用程序中,我有一个列表视图,其中包含来自 firebase 数据库的项目。当我从列表视图中删除一个项目时,它也正确地从 firebase 数据库中删除。问题是我不知道删除操作后谁刷新列表视图。任何人都可以帮我在删除后检索数据吗?

这是从列表视图中删除项目的代码

mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(final AdapterView<?> parent, View view, final int position, long id) {


            final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
            dialogBuilder.setTitle("Delete List___" );
            dialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                    Post post = (Post)parent.getItemAtPosition(position);

                    DatabaseReference del = FirebaseDatabase.getInstance().getReference().child("user-posts").child(getUid())
                            .child(post.getPostId());

                    del.setValue(null);


                }
            });

            dialogBuilder.show();
            return false;
        }
    });

这是我从数据库中检索数据时的代码。

mDatabase.child(getUid()).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            Post post = dataSnapshot.getValue(Post.class);
            mAdapter.add(post);

        }

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

            Log.d(TAG,"dataCHANGE");
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {


            Log.d(TAG,"dataREMOVE "+ dataSnapshot.getKey());
        }

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

            Log.d(TAG,"dataMOVE");
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {


        }
    });

【问题讨论】:

    标签: android listview firebase firebase-realtime-database


    【解决方案1】:

    onChildRemoved 方法将返回已删除节点的密钥,因此您只需将其添加到该方法:

    String key = dataSnapshot.getKey();
    for (Post pt : <list_of_the_adapter> {
    
        if (key.equals(pt.getPostId())) {
            <list_of_the_adapter>.remove(pt);
            <adapter>.notifyDataSetChanged();
    
            break;
        }
    }
    

    【讨论】:

    • 谢谢你的回答,但你能给我一个 的例子吗?
    • 使用 我的意思是,您应该将列表中的适配器列表放在那里。你在创建适配器时给了一个列表,对吧?
    • 你是对的。它有效。你让我很开心。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多