使用Firebase数据库表Xamarin中的数据填充Spinner

时间:2017-08-26 12:47:37

标签: c# android xamarin firebase-realtime-database

我想在我的firebase数据库中的表中填充一个带有字符串列表的微调器。

enter image description here

我希望微调器包含项类别名称,因此测试,自然等。

我的xaml看起来像这样:

<Spinner
    android:spinnerMode="dialog"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/spinnerCategory"
    android:layout_margin="7dp" />

从这里开始,我不确定如何使用数据填充微调器。

1 个答案:

答案 0 :(得分:1)

  

我想在我的firebase数据库中的表中填充一个带有字符串列表的微调器。

首先,请确保您已正确检索数据:

protected override void OnCreate(Bundle savedInstanceState)
{
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Database);

        ...
        spinnerCategory = FindViewById<Spinner>(Resource.Id.spinnerCategory);

        FirebaseApp.InitializeApp(this);

        reference = FirebaseDatabase.Instance.Reference;
        database = FirebaseDatabase.Instance;
        if (reference != null)
        {
            //add value event listener to categories of your database.
            reference.Child("categories").AddValueEventListener(this);
        }
}

public void OnDataChange(DataSnapshot snapshot)
{
        List<string> categories=RetrieveCategories(snapshot);
        UpdateSpinner(categories);
}

private List<string> RetrieveCategories(DataSnapshot snapshot)
{
    List<string> categories = new List<string>();
    var children=snapshot.Children.ToEnumerable<DataSnapshot>();
    HashMap map;
    foreach (var s in children)
    {
        map = (HashMap)s.Value;
        if (map.ContainsKey("categoryName"))
        {
            categories.Add(map.Get("categoryName").ToString());
        }
    }

    return categories;
}

注意:我使用HashMap上传数据,因此在检索数据时,我也会对其进行转换 回到hashmap。

然后创建UpdateSpinner方法来填充SPinner:

private void UpdateSpinner(List<string> categories)
{
    ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Resource.Layout.spinner_item_view, Resource.Id.text_item, categories);
    spinnerCategory.Adapter = adapter;
}

Spinner将正确填写:

enter image description here