我正在使用ViewPager(具有2个String元素:Model类:Title和Content)创建一个App。我有一个浮动操作按钮,并且希望在按下特定按钮时从Firebase和ViewPager中删除该项目。
我尝试在MyAdapter Class中从列表中删除当前项目[modelList.remove(position)],并在TravelNotes中尝试创建从Firebase数据库中删除的方法reference.removeEventListener(this);但我不知道在哪里叫。
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();
}
}
您能否建议我从ViewPager&Firebase中删除特定项目的代码中应该进行哪些更改?
答案 0 :(得分:0)
在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);
}
});