Mein Listenansichtselement enthält eine Schaltfläche zum Entfernen, und ich habe es in meinem Adapter eingerichtet, um das Objekt aus der Datenbank zu entfernen. Nun, wenn das erledigt ist, wie kann ich das Fragment aktualisieren, das die ListView enthält, um dieses Objekt zu entfernen? Relevante Code wie folgt:ListView löscht immer das letzte Objekt
entfernen Artikel im Adapter:
holder.actionIndicator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
alertDialog.setTitle("Delete item");
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
FirebaseMethods firebaseMethods = new FirebaseMethods(mContext);
firebaseMethods.deleteHashtagFromDatabase(title);
dialog.dismiss();
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "no",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
});
Listview ist Setup wie dies in meinem Fragment:
private void setupListView(){
Log.d(TAG, "setupListView: setting up list");
final ArrayList<HashTag> hashTags = new ArrayList<>();
myRef = FirebaseDatabase.getInstance().getReference();
Query query = myRef.child(getString(R.string.dbname_user_hashtags))
.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
if(singleSnapshot != null){
hashTags.add(0, singleSnapshot.getValue(HashTag.class));
}
}
HashTagListViewAdapter adapter = new HashTagListViewAdapter(getActivity(), R.layout.layout_list_itemview, hashTags);
hashtagListView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Dank!
UPDATE:
Jetzt habe ich die OnClickListener auf den Unterpunkt aus dem Adapter an das Fragment Listview OnItemClickListener bestanden wie folgt:
aktualisiert Adapter
holder.actionIndicator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
Aktualisiert Fragment
hashtagListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
long viewId = view.getId();
Log.d(TAG, "onItemClick: viewId is " + viewId);
Log.d(TAG, "onItemClick: position is " + position);
final HashTagListViewAdapter adapter = new HashTagListViewAdapter(getActivity(), R.layout.layout_list_itemview, hashTags);
final HashTag hashTag = hashTags.get(position);
final String title = hashTag.getTitle();
Log.d(TAG, "onItemClick: title is " + title);
if(viewId == R.id.deleteFromListBtn){
AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
alertDialog.setTitle("delete item");
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
FirebaseMethods firebaseMethods = new FirebaseMethods(getActivity());
firebaseMethods.deleteHashtagFromDatabase(title);
Log.d(TAG, "onClick: title is " + title);
// NEW PROBLEM HERE!
adapter.remove(hashTag);
Log.d(TAG, "onClick: removed hashtag is " + hashTag);
adapter.notifyDataSetChanged();
Log.d(TAG, "onItemClick: item removed from list.");
dialog.dismiss();
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "no",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
}
});
Aber jetzt ist das Problem, wenn ich das Element löschen, löscht das ListView immer das letzte Element in der Ansicht. Der richtige Artikel wurde jedoch aus der Datenbank gelöscht, und gemäß dem Protokoll greift dieser Code adapter.remove(hashTag)
das richtige Element, das ich löschen möchte.
die Sache ist, muss ich die Aktion remove in OnClickListener des Adapters für einen Unterpunkt der Listenansicht definieren. Daher wurde OnClickListener nicht im ListView ItemOnClickListener im Fragment festgelegt.Ich habe diesen Teil behoben, aber ein neues Problem taucht auf. Bitte sehen Sie meine Bearbeitung. Vielen Dank! – user8795747