Как удалить элемент ViewPager из Firebase? - PullRequest
0 голосов
/ 01 июня 2019

Я создаю приложение с помощью ViewPager (с двумя строковыми элементами: класс модели: заголовок и содержимое).У меня есть плавающая кнопка действия, и я хочу при нажатии определенной кнопки удалить этот элемент из Firebase & ViewPager.

Я пытался в классе MyAdapter удалить из списка мой текущий элемент [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?

1 Ответ

0 голосов
/ 18 июня 2019

Вот что мне помогло в классе 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);
            }
        });

...