【发布时间】:2020-09-25 22:24:24
【问题描述】:
我也可以从 firebase 实时数据库中删除我的 recyclerView 项目。但是当我滑动该项目并删除时,顶部的回收器项目会到达我删除的 recyclerview 的位置。我该如何解决?
我的源代码: 我正在尝试在这里滑动和删除回收站项目。
private Toolbar toolbar;
public DatabaseReference duyuruRef;
public RecyclerView recyclerView;
ArrayList<Duyuru> duyurular;
RecyclerAdapter recyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ogretmen_duyuru_delete);
recyclerView = findViewById(R.id.recyclerDelete);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
duyuruRef = FirebaseDatabase.getInstance().getReference();
duyuruRef.keepSynced(true);
duyurular = new ArrayList<>();
getDataFromFirebase();
setUpToolbar();
ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder target, int i) {
Duyuru duyuru = new Duyuru();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference duyuruRef = rootRef.child("Duyuru");
String pid = duyuru.getPid();
int position = target.getAdapterPosition();
duyuruRef.child(pid).removeValue();
duyurular.remove(position);
recyclerAdapter.notifyDataSetChanged();
}
});
helper.attachToRecyclerView(recyclerView);
}
private void getDataFromFirebase() {
Query query = duyuruRef.child("Duyuru");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
Duyuru duyuru = new Duyuru();
duyuru.setDuyuruBaslik(snapshot.child("title").getValue().toString());
duyuru.setDuyuruContext(snapshot.child("context").getValue().toString());
duyuru.setDuyuruTime(snapshot.child("time").getValue().toString());
duyuru.setDuyuruDate(snapshot.child("date").getValue().toString());
duyuru.setDuyuruYazar(snapshot.child("yazar").getValue().toString());
duyurular.add(duyuru);
}
recyclerAdapter = new RecyclerAdapter(getApplicationContext(),duyurular);
recyclerView.setAdapter(recyclerAdapter);
recyclerAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
如果你想要我的 RecyclerAdapter,它就在这里:
private Context mContext;
private ArrayList<Duyuru> duyuruArrayList;
public RecyclerAdapter(Context mContext, ArrayList<Duyuru> duyuruArrayList) {
this.mContext = mContext;
this.duyuruArrayList = duyuruArrayList;
}
@NonNull
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.duyuru_items_layout,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.txtBaslik.setText(duyuruArrayList.get(position).getDuyuruBaslik());
holder.txtContext.setText(duyuruArrayList.get(position).getDuyuruContext());
holder.txtYazar.setText(duyuruArrayList.get(position).getDuyuruYazar());
holder.txtTime.setText(duyuruArrayList.get(position).getDuyuruTime());
holder.txtDate.setText(duyuruArrayList.get(position).getDuyuruDate());
holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, activity_duyuru_update_screen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("baslik",duyuruArrayList.get(position).getDuyuruBaslik());
intent.putExtra("context",duyuruArrayList.get(position).getDuyuruContext());
intent.putExtra("yazar",duyuruArrayList.get(position).getDuyuruYazar());
intent.putExtra("time",duyuruArrayList.get(position).getDuyuruTime());
intent.putExtra("date",duyuruArrayList.get(position).getDuyuruDate());
intent.putExtra("pid",duyuruArrayList.get(position).getPid());
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return duyuruArrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView txtBaslik,txtContext,txtYazar,txtTime,txtDate;
RelativeLayout parentLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txtBaslik = itemView.findViewById(R.id.ac_cv_duyuru_baslik);
txtContext = itemView.findViewById(R.id.ac_cv_duyuru_context);
txtTime = itemView.findViewById(R.id.ac_cv_duyuru_time);
txtYazar = itemView.findViewById(R.id.ac_cv_duyuru_yazar);
txtDate = itemView.findViewById(R.id.ac_cv_duyuru_date);
parentLayout = itemView.findViewById(R.id.ac_items_layout);
}
}
【问题讨论】:
-
请向我们展示该行为的具体示例。
-
我已经展示了查看活动中的 ItemTouchHelper 类和 RecyclerAdapter onBindViewHolder
标签: java android firebase firebase-realtime-database