我是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);
}
}
答案 0 :(得分:0)
尝试一下:
在您的onNoteClick(int position)
的{{1}}方法中:
移动这些行:
FeedActivity
直接在usercommentFromFB.remove(position);
userImageFromFB.remove(position);
userEmailFromFB.remove(position);
dokumanl.remove(position);
namel.remove(position);
feedRecyclerAdapter.notifyDataSetChanged();
中
addOnSuccessListener