将Firestore中的自定义对象的数组列表添加到微调器中

问题描述 投票:0回答:1

这是新手。...我创建了以下代码:

自定义类对象

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类

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 dBase的通用类对象)

    /*  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()方法以某种方式更改了集合。

任何建议将不胜感激...

object arraylist google-cloud-firestore
1个回答
0
投票

在填充列表并将列表添加到适配器之后,运行此命令:

spinner_Category.notifyDataSetChanged();
© www.soinside.com 2019 - 2024. All rights reserved.