删除firebase入口节点Android Java

时间:2017-01-06 11:14:50

标签: java android firebase

我从列表视图中添加了firebase的国家/地区列表,现在我尝试通过列表视图项目单击删除节点。

该列表现在显示在列表视图中,当我点击某个特定国家/地区时,它会被删除。到目前为止我已经完成了:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {

            String Country =(listView.getItemAtPosition(position).toString());
            showPopUp(Country);
        }
    });

那是我按下的国家。在弹出菜单方法中我有:

public void showPopUp(final String cntry) {

    PopupMenu popupMenu = new PopupMenu(this, (RelativeLayout) findViewById(R.id.id));
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {

                case R.id.Delete:



                    // Delete from Firebase

                    dref.child(cntry).removeValue();

                    Toast.makeText(getApplicationContext(), cntry,
                            Toast.LENGTH_LONG).show();
                    return true;

                case R.id.Goback:

                    return true;
                default:
                    return false;
            }


        }

    });

虽然我认为我需要在我的情况下从firebase删除密钥而不是孩子。我该如何实现呢?

注意:我将API中的国家/地区添加到列表视图中:

 DatabaseReference dref;
    ListView listView;
    ArrayList<String> list = new ArrayList<>();
    ArrayAdapter<String> adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_favourite_countries_list);

        listView = (ListView) findViewById(R.id.lstViewFavCountries);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);
        dref = FirebaseDatabase.getInstance().getReference();
        dref.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {


                for(DataSnapshot dsp : dataSnapshot.getChildren()){
                    String value = dataSnapshot.getValue().toString();
                    list.add(String.valueOf(dsp.getValue()));
                }

                adapter.notifyDataSetChanged();
            }

https://gyazo.com/705654bde00d245bed57bfd45f1a2f67数据库的链接

1 个答案:

答案 0 :(得分:1)

您需要在某处保存密钥,请致电dataSnapshot.getKey()以获取密钥。

首先,为密钥创建一个新列表

ArrayList<String> listKey = new ArrayList<>();

然后将密钥添加到列表

public void onChildAdded(DataSnapshot dataSnapshot, String s) {
    for(DataSnapshot dsp : dataSnapshot.getChildren()){
        String value = dataSnapshot.getValue().toString();
        list.add(String.valueOf(dsp.getValue()));
        listKey.add(dsp.getKey());
    }
    adapter.notifyDataSetChanged();
}

最后,在您的onItemClick方法中,根据position从列表中获取密钥,然后将字符串传递给删除方法

public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
    String CountryKey = listKey.get(position);
    showPopUp(CountryKey);
}

然后删除值

dref.child("Countries").child(cntry).removeValue();