Итак, я пытаюсь создать приложение для своего учебного проекта, и это, по сути, просто приложение для жилья, которое отображает фид со списками свойств. Моя проблема в том, что при создании я заполняю массив всеми свойствами в коллекции и добавляю прослушиватель снимков. Однако, когда я начинаю свое второе действие по добавлению нового свойства в базу данных, по возвращении в фид mainActivity snapshotListener не реагирует на новый документ свойства, который был добавлен в мою коллекцию, и не добавляет его в мой массив. Так есть ли способ заставить snapshotListener реагировать на то, когда коллекция добавляет новый документ? Я просто хочу, чтобы он добавил новый документ, который был добавлен между снимками, но, может быть, я не знаю, как вызвать новый снимок? Вот код для справки.
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private FirebaseFirestore db;
private CollectionReference properties;
private CardViewAdapter adapter;
List<Property> cards;
SwipeFlingAdapterView flingAdapterView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: started");
initFirestore();
cards = new ArrayList<>();
adapter = new CardViewAdapter(this, R.layout.property_card, cards);
flingAdapterView = findViewById(R.id.frame);
flingAdapterView.setAdapter(adapter);
flingAdapterView.setFlingListener(new SwipeFlingAdapterView.onFlingListener()
{
Property property;
@Override
public void removeFirstObjectInAdapter()
{
property = cards.remove(0);
cards.add(property);
adapter.notifyDataSetChanged();
}
});
flingAdapterView.setOnItemClickListener
(new SwipeFlingAdapterView.OnItemClickListener()
{
@Override
public void onItemClicked(int i, Object o)
{
Intent intent = new Intent(MainActivity.this, ViewContactInfoActivity.class);
intent.putExtra(Property.PARCELABLE_PROPERTY, cards.get(0));
startActivity(intent);
}
});
properties.addSnapshotListener(this, new EventListener<QuerySnapshot>()
{
@Override
public void onEvent(QuerySnapshot queryDocumentSnapshots, FirebaseFirestoreException e)
{
if (e != null)
{
return;
}
for (DocumentChange dc : queryDocumentSnapshots.getDocumentChanges())
{
switch (dc.getType())
{
case ADDED:
Log.d(TAG, "New property: " + dc.getDocument().getData());
cards.add(dc.getDocument().toObject(Property.class));
break;
case MODIFIED:
Log.d(TAG, "Modified property: " + dc.getDocument().getData());
cards.add(dc.getDocument().toObject(Property.class));
break;
case REMOVED:
Log.d(TAG, "Removed property: " + dc.getDocument().getData());
break;
}
}
adapter.notifyDataSetChanged();
}
});
}
//Initialize FireStore
private void initFirestore()
{
db = FirebaseFirestore.getInstance();
properties = db.collection("properties");
}
//Add New Property to DB
public void createListing(View view)
{
Intent intent = new Intent(MainActivity.this, CreateListingActivity.class);
startActivity(intent);
}
}