有没有一种方法可以像使用 ListView 或 RecyclerView 那样使用 firebaseUI 来填充微调项?

Is there a way I can use firebaseUI to populate spinner items like I would do with a ListView or a RecyclerView?

使用 childevent 侦听器可以很好地从我的 Firebase 实时数据库填充我的微调器,但它不如使用 firebaseUI 有效。 该文档仅涵盖 recyclerview 和 listview,但我想将其用于微调器。

 Query query = FirebaseDatabase.getInstance().getReference("Labs");

        FirebaseListOptions<Labs> options = new FirebaseListOptions.Builder<Labs>().setQuery(query, Labs.class).build();


        FirebaseListAdapter<Labs> firebaseListAdapter = new FirebaseListAdapter<Labs>(options) {
            @Override
            protected void populateView(@NonNull View v, @NonNull Labs model, int position) {

            }


        };

        spinner.setAdapter(firebaseListAdapter);

我只是不知道如何将我的模型对象与此处的视图绑定。

您有两个选择: 一种是通过您从查询

中获得的数据列表来初始化您的 ArrayAdapter
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(this,   android.R.layout.simple_spinner_item,querylistData);
spinner.setAdapter(adapter);

其次,您可以将数据绑定到文本视图,如下所示:

FirebaseListAdapter<Labs> firebaseListAdapter = new FirebaseListAdapter<Labs>(this, Labs.class ,android.R.layout.simple_spinner_item, query) {
   protected void populateView(View v,Lab model, int position)
     { 


         ((TextView)v.findViewById(android.R.id.text1)).setText(model.getName());

     }
 };
 spinner.setAdapter(firebaseListAdapter);

您的代码中有两个问题。首先,您收到以下错误:

layout cannot be null

因为您没有在 populateView() 方法中分配任何布局。在您的代码中,此方法为空。所以你应该为每个元素创建一个可以包含一个TeexView的自定义布局将帮助你解决这个问题。

第二个问题是您正在使用 FirebaseListAdapter 但没有在任何地方监听更改。要解决此问题,请在您的 onStart() 方法中使用以下代码行:

firebaseListAdapter.startListening();

不要忘记在不需要时将其删除,方法是在 onStop() 方法中添加以下代码行:

if(firebaseListAdapter != null) {
    firebaseListAdapter.stopListening();
}