Новое во всем этом .... Я создал следующий код:
Объект пользовательского класса
public class Category {
private String documentID;
private int id;
private String description;
private boolean active;
private int sort;
public Category(){
//public no-arg constructor needed
}
public Category(int id, String description, boolean active, int sort) {
this.id = id;
this.description = description;
this.active = active;
this.sort = sort;
}
@Exclude
public String getDocumentID() {
return documentID;
}
public void setDocumentID(String documentID) {
this.documentID = documentID;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
@Override
public String toString() {
return description;
}
}
MainActivity Class
public class MainActivity extends AppCompatActivity {
// Local XML obect declarations...
private Spinner spinner_Category;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Load the CATEGORY spinner with the ACTIVE categories from the Firestore
spinner_Category = (Spinner)findViewById(R.id.spinner_category);
populateCategories();
spinner_Category.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Category category = (Category) parent.getSelectedItem();
displayCategoryData(category);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
String message = "Nothing selected";
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});
}
private void populateCategories(){
// DBHelper dbHelper = DBHelper.getInstance(this);
DBHelper dbHelper = new DBHelper(this);
ArrayList<Category> categoryList = dbHelper.getAllCategories();
ArrayAdapter<Category> adapterCategories = new ArrayAdapter<Category>(this,
android.R.layout.simple_spinner_item, categoryList);
adapterCategories.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_Category.setAdapter(adapterCategories);
}
private void displayCategoryData(Category category) {
String description = category.getDescription();
int sort = category.getSort();
boolean active = category.isActive();
String userData = "Description: " + description + "\nSort: " + sort + "\nActive: " + active;
Toast.makeText(this, userData, Toast.LENGTH_LONG).show();
}
}
Метод из моего класса DBHelper (объект общего класса для чтения / записи в базу данных Firestore)
/* Function: getAllCategories
* Return a collection of ACTIVE cattegories from the Firestore */
public ArrayList<Category> getAllCategories() {
final ArrayList<Category> categoryList = new ArrayList<>();
CollectionReference colref = db.collection(COLLECTION_CATEGORIES);
colref.whereEqualTo(CATEGORY_ACTIVE, true)
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot dcSnapshot: queryDocumentSnapshots) {
Category c = dcSnapshot.toObject(Category.class);
c.setDocumentID(dcSnapshot.getId());
categoryList.add(c);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, e.toString());
}
});
return categoryList;
}
И, наконец, Activity_main XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="10sp"
android:text="App Title"
android:textColor="@color/cardview_dark_background"
android:textSize="18sp" />
<Spinner
android:id="@+id/spinner_category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:padding="16dp" />
Проблема в том, что этот код может заполнять Spinner объектами Category, но он не отображает, не изначально выбирает или не вызывает событие OnItemSelected. Поскольку этот код практически идентичен другому коду, я использовал чтение записей из базы данных SQLite, а не из базы данных Firestore, поэтому я предполагаю, что это метод QueryDocumentSnapshot.toObject (), который каким-либо образом изменяет коллекцию.
Любой советую с благодарностью ...