有没有一种方法可以像使用 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();
}
使用 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);
我只是不知道如何将我的模型对象与此处的视图绑定。
您有两个选择: 一种是通过您从查询
中获得的数据列表来初始化您的 ArrayAdapterArrayAdapter<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();
}