Как обновить список после удаления элемента? - PullRequest
0 голосов
/ 06 апреля 2019

Каждый раз, когда я удаляю данные из firebase в представлении списка, я визуализирую разделение данных и не правильно. У меня уже есть адаптер, но я не могу справиться с этим. В этом коде я вижу представление списка в базе данных Firebase и, когда я нажимаю на элемент данных, я спрашиваю пользователя, хочет ли он удалить данные. что мне делать?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    firebaseAuth = FirebaseAuth.getInstance();
    firebaseUser = firebaseAuth.getCurrentUser();
    setContentView(R.layout.activity_elenco);

    storage = FirebaseStorage.getInstance();
    //storageReference = storage.getReference();
    listView = findViewById(R.id.listView);
    databaseReference = FirebaseDatabase.getInstance().getReference("Users");

    usersList = new ArrayList<>();


}

@Override
protected void onStart() {
    super.onStart();
    Query query = databaseReference.orderByChild("id").equalTo(firebaseUser.getUid());

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot usersSnapshot:dataSnapshot.getChildren()){
                Users users = usersSnapshot.getValue(Users.class);
                usersList.add(users);
                keyList.add(usersSnapshot.getKey());
            }
            UserAdapter userAdapter = new UserAdapter(Elenco.this,usersList);
            listView.setAdapter(userAdapter);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        final CharSequence[] items = {"SI","NO"};
        AlertDialog.Builder builder = new AlertDialog.Builder(Elenco.this);
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            builder.setTitle("Vuoi eliminare la segnalazione?");
            builder.setItems(items, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int i) {
                    if(items[i]=="SI"){
                        StorageReference photoRef = storage.getReferenceFromUrl("gs://tesi-779f2.appspot.com/"+keyList.get(position));
                        photoRef.delete();
                        usersList.remove(position);
                        databaseReference.getRoot().child("Users").child(keyList.get(position)).removeValue();
                        keyList.remove(position);
                        startActivity(new Intent(Elenco.this,Profilo.class));
                    }else if(items[i]=="NO"){
                        dialog.dismiss();
                    }

                }
            });
            builder.show();

        }
    });
}
}

Ответы [ 3 ]

0 голосов
/ 06 апреля 2019

Определите метод в классе адаптера следующим образом

public void refresh(List<Users> userList){
        this.userList=userList;
        notifyDataSetChanged();
    }

и вызывайте этот метод всякий раз, когда вы вносите изменения.

0 голосов
/ 06 апреля 2019

Вам необходимо удалить данные из адаптера списка через adapter.remove(adapter.getItem(position));

, а затем вызвать notifyDataSetChanged() на адаптере.

0 голосов
/ 06 апреля 2019

UserAdapter userAdapter . сделайте эту переменную глобальной над методом onCreate.

и в событии onItemClick после

keyList.remove(position);
startActivity(new Intent(Elenco.this,Profilo.class));

напишите ниже строки.

userAdapter.notifyDataSetChanged();

Это обновит ваш список.

...