我已经使用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) {
}
});
}
}
答案 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
}
});