使用childevent监听器可以很好地从Firebase实时数据库中填充微调器,但不如使用firebaseUI有效。文档只涵盖了recycleview和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);
我只是不知道如何将我的模型对象与此处的视图绑定。
您的代码中有两个问题。首先,您会得到以下错误:
layout cannot be null
因为在populateView()
方法中没有分配任何布局。在您的代码中,此方法为空。因此,您应该创建一个自定义布局,其中可以为每个元素包含一个TeexView
。这将帮助您解决这个问题。
第二个问题是,您正在使用FirebaseListAdapter
,但不在任何地方侦听更改。要解决此问题,请在onStart()
方法中使用以下代码行:
firebaseListAdapter.startListening();
不要忘了在onStop()
方法中添加以下代码行来删除一次不需要的代码:
if(firebaseListAdapter != null) {
firebaseListAdapter.stopListening();
}
您有两个选项:一种方法是通过从查询中获得的数据列表初始化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);