android - 来自 Firebase 的微调器值,在新数据上添加微调器项
问题描述
我已经使用 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) {
}
});
}
}
解决方案
每次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
}
});
推荐阅读
- charts - 绘制图表后设置线标记时来自Json的Anychart错误
- flutter - Flutter 中 WebView 的阅读器模式
- javascript - 根据Django中的事件渲染字典的键值
- python - 在 python/pandas 中,如何创建一个程序来从任何给定目录中的 .csv 文件的标题“自动命名”数据帧?
- ios - 如何修复 EXC_BAD_ACCESS KERN_INVALID_ADDRESS 崩溃
- flutter - Flutter Countdown - 重新开始倒计时
- reactjs - 如何使用 ReactJs 和 Hooks 对 Cloud FireStore 数据进行分页
- batch-file - 删除文件、文件夹和子文件夹,但跳过包含特定字符串的文件
- regex - 根据特殊字符的存在和 Postgres 中的字符串匹配将列值拆分为多行
- cmd - 如何通过命令提示符运行 DirectX 游戏