When click on listview , delete it and delete associated data with it in firebase

前端 未结 2 858
忘了有多久
忘了有多久 2021-01-23 16:26

Hello and thanks for help I have asked here how to Polpulate listview from firebase and thankfully Krishna Kishan solved my problem but now what I like to do is when I click on

相关标签:
2条回答
  • 2021-01-23 17:09

    You have to modify some code that is outside the snippet you posted.

    I guess your items are read from the database. When you read your "message" node you have to save keys as well as values. You can achieve this in a number of ways. e.g.

    final ArrayList<String> keyList = new ArrayList<>();
    final ArrayList<String> items = new ArrayList<>();
    myRef.getRoot().child("messages")
            .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot messages : dataSnapshot.getChildren()) {
                keyList.add(messages.getKey());
                items.add(messages.getValue(String.class));
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            /*handle errors*/
        }
    });
    

    Now you have both keys and values. Modify your OnClickListener this way:

    listi.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            items.remove(position);
            adapt.notifyDataSetChanged();
            //new code below
            myRef.getRoot().child("message").child(keyList.get(position)).removeValue();
            keyList.remove(position);
        }
    });
    

    Obviously listi.setOnItemClickListener( ... ) should be called when both keyList and items are properly filled. Please notice that ValueEventListener is asynchronous.

    0 讨论(0)
  • 2021-01-23 17:15

    I assume you are using push() to add those messages to the database. Since push() generates a time based id, the order of the elements in the list is chronological, meaning what was added later comes after what was added earlier. So, when you are push()-ing, get the key and maintain a list of the ids. Then, in your onClick, use the position parameter to get the id for the clicked item and delete it in the database. Here's an example:

    List<String> ids; //update this list with ids as you push
    ..
    //then in your onItemClick
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
      rootReference.child("messages").child(ids.get(position)).removeValue();
      //update any offline lists
    }
    

    Please note that this assumes you're also displaying the messages in your ListView in the same order as in your database.

    0 讨论(0)
提交回复
热议问题