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
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.
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.