我正在使用 RecyclerView 与数据绑定,但是当我第一次运行应用时,没有任何内容显示,然后更新一些内容或通过更新应用即时运行会显示内容。
我的ViewHolder:
class MyViewHolder extends RecyclerView.ViewHolder {
private ItemBinding mBinding;
public MyViewHolder(View itemView) {
super(itemView);
mBinding = DataBindingUtil.bind(itemView);
}
ItemBinding getBinding() {
return mBinding;
}
}
我的适配器:
public class MyAdapter extends FirebaseRecyclerAdapter<MyModel, MyViewHolder> {
public MyAdapter(Query ref) {
super(MyModel.class, R.layout.my_item, MyViewHolder.class, ref);
}
@Override
protected void populateViewHolder(MyViewHolder viewHolder, MyModel model, int position) {
ItemBinding binding = viewHolder.getBinding();
binding.setMyModel(model);
binding.executePendingBindings();
}
}
我在其他一些问题中发现我需要致电binding.executePendingBindings()
,这是我没有成功的。
修改
我刚刚添加了一个日志调用:
Log.d(BuildConfig.TAG, "called populateViewHolder " + position);
在populateViewHolder
方法上。永远不会打印日志。
修改2
我如何初始化我的recyclerView:
// onCreate
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view)
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(llm);
mRef = FirebaseDatabase.getInstance().getReference().child(CHILD_TREE)
// onStart
mAdapter = new MyAdapter(mref.orderByChild("date"));
mRecyclerView.setAdapter(mAdapter);
答案 0 :(得分:1)
来自我的评论:
您是否已查看firebase/FirebaseUI-Android问题..?将
RecyclerView height
从wrap_content
设置为match_parent
解决了那里的问题。
显然,使用height
wrap_content
时,RecyclerView
中的FirebaseRecyclerAdapter
设置为DataBinding
确实存在问题。
将其更改为
android:layout_height="match_parent"
它应该有效。
FirebaseUI-Android团队认为这是RecyclerView
本身存在的问题,并已解决此问题。 This是Github问题的交叉点。
答案 1 :(得分:-1)
将数据存储在模型的ArrayList中。然后尝试在适配器中实现onBindViewHolder方法。 onBindViewHolder有两个属性 - 持有者和位置。持有者将是MyViewHolder类的一个对象,您可以使用该位置从数组列表中获取模型的对象。
答案 2 :(得分:-1)
已修改
您正在调用给定的陈述
mAdapter = new MyAdapter(mref.orderByChild("date"));
mRecyclerView.setAdapter(mAdapter);
onStart
中的。在onCreate之后 onStart调用。在初始化之前已经将适配器设置为recyclerView,并且尚未创建数据库的引用。在onCreate之后将上述两个语句放在
之后LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view)
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(llm);
mRef = FirebaseDatabase.getInstance().getReference().child(CHILD_TREE) ;
// adapter must be set after getting mRef
mAdapter = new MyAdapter(mref.orderByChild("date"));
mRecyclerView.setAdapter(mAdapter);