当前位置: 首页 > 知识库问答 >
问题:

更新Firebase时从ListView中删除旧条目

邢高澹
2023-03-14

我的代码有点纠结。我已经搜索并尝试了许多方法。我的目标是删除Firebase之前提供给我的应用程序的条目,Firebase数据来自嵌入式设备。我想替换android应用程序中的值。

Firebase工作正常,应用程序将显示Firebase提供的新值,但不会删除以前的条目。

我还有很多事情要做,但想在继续前进之前解决基础问题。

因此,OnChildChanged基本上会显示新的firebase条目,我只想在firebase中出现新值时,将之前的条目从Android应用程序中删除。

我已经研究了removeValue和setValue,但没有结果

public class MainActivity extends AppCompatActivity {
DatabaseReference fDatabase;
ListView listview;
ArrayList<String> list = new ArrayList<>();
ArrayAdapter <String> adapter;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listview = (ListView) findViewById(R.id.listview);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, list);
    listview.setAdapter(adapter);


    fDatabase = FirebaseDatabase.getInstance().getReference();
    fDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String value = dataSnapshot.getValue(String.class);
            list.add(value);
            adapter.notifyDataSetChanged();

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            String value = dataSnapshot.getValue(String.class);
            list.remove(value);
            adapter.notifyDataSetChanged();
            list.add(value);
            adapter.notifyDataSetChanged();

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

}

共有1个答案

葛宪
2023-03-14
    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        String value = dataSnapshot.getValue(String.class);
        list.remove(value);
        adapter.notifyDataSetChanged();
        list.add(value);
        adapter.notifyDataSetChanged();
    }

看起来,当您指定值时,它将获取新条目,因此当您调用列表时。remove不是删除旧条目,因为它实际上试图删除新条目的任何实例。

查看是否有任何方法可以将旧条目映射到新条目,以便列表知道要删除什么,因为value的内容在新旧之间是不同的。

 类似资料:
  • 当我更改ListViewAdapter时,我的项目将无法从ListView中清除,并且我有一些空白条目。 她是我的密码:

  • 我正在用C#WPF做一个项目,它包含在一个客户机管理中,在那里我添加了新的客户机,在一个txt文档中有save,我有一个listview,在那里我可以看到所有添加的客户机,但现在我想实现一个delete按钮,在那里我从listview中选择一个客户机,并可以删除它。如果我现在做的正确,如果有人能帮我…,…谢谢。

  • 我对下面的Java程序有问题。我在Ubuntu系统上使用带有JDK-1.8u25的JavaFX。我想显示一个ListView,并从列表中删除突出显示的条目。我创建了一个列表,并将其与一个可观察列表配对,以通知侦听器事件。然而,通过删除下面的“orderOvList.remove(i,i 1)”项来更改列表似乎会生成另一个侦听器事件。所以,我似乎在侦听器代码的主体中递归。我想过将list元素从nor

  • 我以为上面的办法行得通,但它失败了。我把它放在渲染行部分。它出现了reference.remove失败。第一个参数必须是有效的函数。就像在这些房间里,它有信息,我认为这是我出错的地方,但我不知道如何去做它。谢谢。

  • 我有一个通过互联网下载文件的应用程序。应用程序开始下载,但不知道如何显示进度条。以下适配器类: 以下是下载文件的类: 现在我卡住了如何更新进度条!任何想法

  • 我正在使用Inno Setup安装和更新我的python应用程序。 更新时,安装程序不会删除以前安装的py文件,这会产生两个问题: > 我使用的是插件:如果我在新版本中删除了插件,它仍然适用于执行更新的用户。 <罢工>卸载更新的安装时,将不会删除旧安装中的文件。(无法复制…) 如何在升级之前强制Inno安装程序卸载我的应用程序? 这是我的脚本: