从RecyclerView中删除项目会导致项目复制

问题描述 投票:0回答:1

我是android的新手。我正在尝试制作一个人们可以彼此共享图像的应用程序。(类似于instagram),我为此使用了Firebase存储和存储。在recyclerview上添加新图像不是问题,当我长按它时,我也想删除它。但是对于我来说,当我长按该项目时,不仅删除了该项目,而且其他项目也都被复制了。我在此处添加了示例图片。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);


}

}

java android-studio arraylist android-recyclerview recycler-adapter
1个回答
0
投票

尝试一下:

在您的onNoteClick(int position)中的FeedActivity方法中:

移动这些行:

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

 ..........
 ..........
© www.soinside.com 2019 - 2024. All rights reserved.