在Android中更新Firebase数据库时,ListView值与值重复

问题描述

我在Ticks中有Private Sub TextBox1_TextChanged(sender As Object,e As EventArgs) Handles TextBox1.TextChanged 'Start/restart the Timer. Timer1.Stop() Timer1.Start() End Sub Private Sub Timer1_Tick(sender As Object,e As EventArgs) Handles Timer1.Tick Timer1.Stop() 'Perform the filtering. BindingSource1.Filter = $"ColumnName LIKE '{TextBox1.Text}*'" End Sub ,其中我正在使用Listview设置数据,当我使用对话框删除数据时,值将在Fragment中复制。我不知道该怎么办,在对话框中单击删除按钮时,我想过要刷新ArrayAdapter,但我不知道该怎么做。我是Android新手,请告诉我解决这个问题。这是我的代码

教师名单

listview

这是我的对话框代码,我叫fragment中带有{。{1}}的{​​{1}}框。

MyDailogFragment

public class listofFaculty extends Fragment {

    DatabaseReference ref;
    ListView listview;
    List<String> store;
    List<String> UserID;
    String[] faculty_list;
    String a;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ref = FirebaseDatabase.getInstance().getReference("Faculty");
    }

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        final View root =  inflater.inflate(R.layout.fragment_list_of_faculty,container,false);

        listview = root.findViewById(R.id.lv);
        store =new ArrayList<>();
        UserID =new ArrayList<>();

        ref.addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot postsap : dataSnapshot.getChildren() ) {

                    DataSnapshot data = postsap.child("name");
                    if(data.exists()){
                         a =  data.getValue().toString();
                    }
                    store.add(a);
                    String Id = postsap.getKey();
                    UserID.add(Id);
                }

                faculty_list = new String[store.size()];

                for(int i=0;i<faculty_list.length;i++){
                    faculty_list[i] =store.get(i);
                }
                if (getActivity() != null) {
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),android.R.layout.simple_spinner_item,faculty_list);
                    listview.setAdapter(adapter);
                }
            }

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

            }
        });

        listview.setonItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent,View view,int position,long id) {

                Intent i = new Intent(getContext(),Faculty.class);
                i.putExtra("User_Id",UserID.get(position));
                startActivity(i);
            }
        });

        listview.setonItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent,long id) {

                String name = faculty_list[position];
                Toast.makeText(getContext(),""+UserID.get(position),Toast.LENGTH_SHORT).show();

                DialogFragment dialogFragment =new MyDailogFragment();
                Bundle bundle =new Bundle();
                bundle.putString("Name",name);
              
                bundle.putString("Id",UserID.get(position));
                dialogFragment.setArguments(bundle);
                dialogFragment.show(getChildFragmentManager(),"missiles");

                return true;
            }
        });

        return root;
    }
}

解决方法

具有新值时必须清除旧数据

ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                store.clear();
                for(DataSnapshot postsap : dataSnapshot.getChildren() ){

                    DataSnapshot data = postsap.child("name");
                    if(data.exists()){
                        a =  data.getValue().toString();
                    }

                    store.add(a);
                    String Id = postsap.getKey();
                    UserID.add(Id);
                }

                faculty_list = new String[store.size()];

                for(int i=0;i<faculty_list.length;i++){
                    faculty_list[i] =store.get(i);
                }
                if (getActivity() != null) {
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),android.R.layout.simple_spinner_item,faculty_list);
                    listview.setAdapter(adapter);
                }


            }

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

            }
        });