gpt4 book ai didi

java - 从 RecyclerView 中删除项目会导致项目重复

转载 作者:行者123 更新时间:2023-12-01 16:42:32 24 4
gpt4 key购买 nike

我是 Android 新手。我正在尝试制作一个人们可以彼此共享图像的应用程序。(类似于 instagram)我正在使用 firebase 存储和存储。在回收器 View 上添加新图像不是问题,而且我想在长按该项目时删除该项目。但就我而言,当我长按该项目时,不仅该项目被删除,而且其余项目也被复制。我在此处添加了示例图片。 problem example但是,一旦我重新启动,应用程序列表似乎就很好,没有任何重复。

这是我的提要屏幕代码;

public class FeedActivity extends AppCompatActivity implements FeedRecyclerAdapter.OnNoteListener {

private FirebaseAuth firebaseAuth;
private FirebaseFirestore firebaseFirestore;

private FirebaseStorage firebaseStorage;
private StorageReference storageReference;

ArrayList<String> userEmailFromFB;
ArrayList<String> usercommentFromFB;
ArrayList<String> userImageFromFB;
FeedRecyclerAdapter feedRecyclerAdapter;
ArrayList<String> dokumanl;
ArrayList<String> namel;



@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater=getMenuInflater();
menuInflater.inflate(R.menu.insta_options_menu,menu);

return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId()== R.id.add_post){
Intent intentToUpload=new Intent(FeedActivity.this, UploadActivity.class);
startActivity(intentToUpload);

}else if (item.getItemId()==R.id.signout){
firebaseAuth.signOut();
Intent intentToSignUp=new Intent(FeedActivity.this,SignUpActivity.class);
startActivity(intentToSignUp);
finish();

}
return super.onOptionsItemSelected(item);

}


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

usercommentFromFB=new ArrayList<>();
userEmailFromFB=new ArrayList<>();
userImageFromFB=new ArrayList<>();
dokumanl =new ArrayList<>();
namel=new ArrayList<>();


firebaseStorage = FirebaseStorage.getInstance();
storageReference= firebaseStorage.getReference();


firebaseAuth=FirebaseAuth.getInstance();
firebaseFirestore=FirebaseFirestore.getInstance();



RecyclerView recyclerView=findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
feedRecyclerAdapter= new FeedRecyclerAdapter(userEmailFromFB,usercommentFromFB,userImageFromFB, this);
recyclerView.setAdapter(feedRecyclerAdapter);

getDataFromFirestore();


}



public void getDataFromFirestore(){

CollectionReference collectionReference=firebaseFirestore.collection("Posts");

collectionReference.orderBy("date", Query.Direction.DESCENDING).addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {

if (e != null){
Toast.makeText(FeedActivity.this, e.getLocalizedMessage().toString(), Toast.LENGTH_LONG).show();
}
if( queryDocumentSnapshots != null){

for( DocumentSnapshot snapshot: queryDocumentSnapshots.getDocuments()){

Map<String,Object> data= snapshot.getData();


String comment= (String)data.get("comment");
String userEmail=(String)data.get("useremail");
String downloadUrl= (String)data.get("downloadurl");
String dokuman= snapshot.getId();
String name= (String)data.get("name");


usercommentFromFB.add(comment);

userEmailFromFB.add(userEmail);
userImageFromFB.add(downloadUrl);
dokumanl.add(dokuman);
namel.add(name);



feedRecyclerAdapter.notifyDataSetChanged();

}
}
}
});



}


@Override
public void onNoteClick(int position) {
//System.out.println("position:"+ namel.get(position));

StorageReference desertRef= storageReference.child(namel.get(position));
desertRef.delete();


firebaseFirestore.collection("Posts").document(dokumanl.get(position))
.delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {

Toast.makeText(FeedActivity.this, "Silindi", Toast.LENGTH_LONG).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {

}
});

usercommentFromFB.remove(position);
userImageFromFB.remove(position);
userEmailFromFB.remove(position);
dokumanl.remove(position);
namel.remove(position);

feedRecyclerAdapter.notifyDataSetChanged();
}

}

这也是我的适配器代码;

public class FeedRecyclerAdapter extends RecyclerView.Adapter<FeedRecyclerAdapter.PostHolder>  {


private ArrayList<String> userEmailList;
private ArrayList<String> userCommentList;
private ArrayList<String> userImageList;
private OnNoteListener mOnNoteListener;

public FeedRecyclerAdapter(ArrayList<String> userEmailList, ArrayList<String> userCommentList, ArrayList<String> userImageList, OnNoteListener onNoteListener) {
this.userEmailList = userEmailList;
this.userCommentList = userCommentList;
this.userImageList = userImageList;
this.mOnNoteListener= onNoteListener;

}


@NonNull
@Override
public PostHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext());
View view=layoutInflater.inflate(R.layout.recycler_row,parent,false);
return new PostHolder(view, mOnNoteListener);
}

@Override
public void onBindViewHolder(@NonNull PostHolder holder, int position) {

holder.userEmailText.setText(userEmailList.get(position));
holder.commentText.setText(userCommentList.get(position));

Picasso.get().load(userImageList.get(position)).into(holder.imageView);

}

@Override
public int getItemCount() {
return userEmailList.size();
}

class PostHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
ImageView imageView;
TextView userEmailText;
TextView commentText;
OnNoteListener onNoteListener;



public PostHolder(@NonNull View itemView, OnNoteListener onNoteListener) {
super(itemView);

imageView=itemView.findViewById(R.id.recyclerView_row_imageview);
userEmailText=itemView.findViewById(R.id.recyclerView_row_useremail_text);
commentText=itemView.findViewById(R.id.recyclerView_row_comment_text);
this.onNoteListener=onNoteListener;

itemView.setOnLongClickListener(this);

}

@Override
public boolean onLongClick(View v) {
onNoteListener.onNoteClick(getAdapterPosition());

return false;
}
}

public interface OnNoteListener{
void onNoteClick(int position);


}

}

最佳答案

试试这个:

FeedActivityonNoteClick(intposition) 方法中:

移动这些行:

usercommentFromFB.remove(position);
userImageFromFB.remove(position);
userEmailFromFB.remove(position);
dokumanl.remove(position);
namel.remove(position);

feedRecyclerAdapter.notifyDataSetChanged();

直接在addOnSuccessListener中:

........
........

firebaseFirestore.collection("Posts").document(dokumanl.get(position))
.delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {

Toast.makeText(FeedActivity.this, "Silindi", Toast.LENGTH_LONG).show();

//here..........
}
})

..........
..........

关于java - 从 RecyclerView 中删除项目会导致项目重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61835452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com