[英]How to remove a ViewPager item from Firebase?
I am creating an App with ViewPager (with 2 String elements: Model Class: Title and Content). 我正在使用ViewPager创建一个App(带有2个String元素:Model Class:Title和Content)。 I have a floating action button and I want when pressing a specific button, to delete that item from Firebase & ViewPager.
我有一个浮动操作按钮,我想在按下特定按钮时,从Firebase和ViewPager中删除该项目。
I tried in MyAdapter Class to remove from the list my current item [ modelList.remove(position)] and in TravelNotes to create a method for delete from Firebase database reference.removeEventListener(this); 我尝试在MyAdapter类中从列表中删除我当前的项[modelList.remove(position)],并在TravelNotes中创建一个从Firebase数据库中删除的方法reference.removeEventListener(this); but I don't know where to call it.
但我不知道在哪里打电话。
public class MyAdapter extends PagerAdapter {
Context context;
List<Model> modelList;
LayoutInflater inflater;
public MyAdapter(Context context, List<Model> modelList) {
this.context = context;
this.modelList = modelList;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return modelList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == o;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
((ViewPager)container).removeView((View) object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position) {
View view = inflater.inflate(R.layout.adapter,container,false);
TextView model_titlu = view.findViewById(R.id.titleTextView);
TextView model_continut = view.findViewById(R.id.contentTextView);
FloatingActionButton fab_delete = view.findViewById(R.id.fab_delete);
model_titlu.setText(modelList.get(position).getTitlu());
model_continut.setText(modelList.get(position).getContinut());
fab_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Model m = modelList.get(position);
modelList.remove(position);
notifyDataSetChanged();
//how to delete?
}
});
container.addView(view);
return view;
}
}
public class TravelNotes extends AppCompatActivity implements IFirebaseLoadDone, ValueEventListener {
ViewPager viewPager;
MyAdapter adapter;
DatabaseReference databaseReference;
IFirebaseLoadDone iFirebaseLoadDone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe_data);
databaseReference = FirebaseDatabase.getInstance().getReference("Movie");
iFirebaseLoadDone = this;
loadModel();
viewPager = findViewById(R.id.viewPager);
viewPager.setPageTransformer(true,new DepthPageTransformer());
}
private void loadModel() {
databaseReference.addValueEventListener(this);
}
//where to use this method?
private void delete(){
databaseReference.removeValue();
}
@Override
public void onFirebaseLoadSuccess(List<Model> modelList) {
adapter = new MyAdapter(this,modelList);
viewPager.setAdapter(adapter);
}
@Override
public void onFirebaseLoadFailed(String message) {
Toast.makeText(this,message,Toast.LENGTH_LONG).show();
}
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<Model> modelList = new ArrayList<>();
for(DataSnapshot modelSnapshot:dataSnapshot.getChildren())
modelList.add(modelSnapshot.getValue(Model.class));
iFirebaseLoadDone.onFirebaseLoadSuccess(modelList);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
iFirebaseLoadDone.onFirebaseLoadFailed(databaseError.getMessage());
}
@Override
protected void onDestroy() {
databaseReference.removeEventListener(this);
super.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
databaseReference.addValueEventListener(this);
}
@Override
protected void onStop() {
databaseReference.removeEventListener(this);
super.onStop();
}
}
Could you please advice what should I change in the code for deleting a specific item from ViewPager & Firebase? 您能否建议我在ViewPager&Firebase中删除特定项目的代码中应该更改哪些内容?
Here is what helped me, in MyAdapter Class: 以下是MyAdapter类中的帮助:
final ArrayList<String> keyList = new ArrayList<>();
TravelNotesActivity.databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Log.e("TAG", "MyAdaptor :" + ds.getKey());
keyList.add(ds.getKey());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
fab_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
modelList.remove(position);
notifyDataSetChanged();
TravelNotesActivity.databaseReference.child(keyList.get(position)).removeValue();
keyList.remove(position);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.