私のコードで少し苦労しています。私は多くの方法を探して試しました。私の目的は、Firebaseがアプリケーションに提供した以前のエントリを削除することです。firebaseデータは埋め込みデバイスから取得しています。私はAndroidアプリケーションの値を置き換えたいと考えています。Firebaseが更新されたときにListViewから古いエントリを削除します
Firebaseが正常に動作しています。アプリケーションはfirebaseによって提供された新しい値を表示しますが、以前のエントリは削除しません。
私はまだたくさんあるが、移動する前に基本を修正したい。
基本的にOnChildChangedは新しいFirebaseエントリを表示しますが、Firebaseから新しい値が入力されると、Androidアプリケーションから以前のエントリが削除されます。私は無駄
public class MainActivity extends AppCompatActivity {
DatabaseReference fDatabase;
ListView listview;
ArrayList<String> list = new ArrayList<>();
ArrayAdapter <String> adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, list);
listview.setAdapter(adapter);
fDatabase = FirebaseDatabase.getInstance().getReference();
fDatabase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
list.add(value);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
list.remove(value);
adapter.notifyDataSetChanged();
list.add(value);
adapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
私は解決策を見つけました。かなり単純です.Adapter.clearをOnChildChangedに追加しました。 –