使用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);
我只是不知道如何在此处将我的模型对象与视图绑定。
答案 0 :(得分:0)
您将有两个选择: 一种是通过从查询获得的数据列表初始化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);
答案 1 :(得分:0)
您的代码中有两个问题。首先,您遇到以下错误:
layout cannot be null
因为您没有在populateView()
方法中分配任何布局。在您的代码中,此方法为空。因此,您应该创建一个自定义布局,其中每个元素可以包含一个TeexView
,这将有助于您解决此问题。
第二个问题是您正在使用FirebaseListAdapter
,但不听任何地方的更改。要解决此问题,请在您的onStart()
方法中使用以下代码行:
firebaseListAdapter.startListening();
也不要忘记通过在您的onStop()
方法中添加以下代码行来将其删除:
if(firebaseListAdapter != null) {
firebaseListAdapter.stopListening();
}