Firebase中的微调器值,在新数据上添加微调器

时间:2020-09-08 08:08:46

标签: android firebase-realtime-database

我已经使用Spinner和Firebase实时数据库读取完成了我的项目。对于新增加的值,微调框不会删除旧值,该怎么做?

在这里预览 https://photos.app.goo.gl/jYTyJvcDpqBeGDTg9

“ POS”是我添加到数据库中的新项目,这里是预览https://photos.app.goo.gl/mH14qQ54ra3ULBZH8

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    spinner = (Spinner) findViewById(R.id.tujuan_spinner);

    databaseReference = FirebaseDatabase.getInstance().getReference("Spinner_Tujuan");

    spinnerDataList = new ArrayList<>();
    adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, spinnerDataList);

    spinner.setAdapter(adapter);
    retrieveData();

当我添加新值时,微调器仍保留旧值,该值变成了重复值。插入新值后如何删除旧值?

    //HERE
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, final int i, long l) {
            spinner.setSelection(i);
            final String value =spinner.getSelectedItem().toString();

            if (value.equals("SILA PILIH")){
                //DO nothing

            }if (value.equals("Pegawai")){
                bukasenaraiPegawai();
            } else {
                admin.setValue(value);
                openDialogInfo();
                spinner.setSelection(0);
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });
}

public void retrieveData(){
    listener = databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot item : dataSnapshot.getChildren()){
                spinnerDataList.add(item.getValue().toString());
            }
            adapter.notifyDataSetChanged();
        }

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

        }
    });
}
}

1 个答案:

答案 0 :(得分:1)

每次调用您的onDataChange方法时,dataSnapshot都会包含databaseReference处所有数据的快照。因此,您需要清除spinnerDataList中的现有数据以防止重复:

listener = databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        spinnerDataList.clear();
        for (DataSnapshot item : dataSnapshot.getChildren()){
            spinnerDataList.add(item.getValue().toString());
        }
        adapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});