简体   繁体   English

如何从Firebase中删除ViewPager项?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM