FirebaseRecyclerAdapter 不适用于数据绑定
FirebaseRecyclerAdapter doesnt work with databindings
我正在使用 RecyclerView 和 databindings 但是当我第一次 运行 应用程序时没有任何显示更新一些内容或通过 instant 运行 更新应用后,内容出现。
我的 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);
将您的数据存储在您的 ArrayList 中 model.Then 尝试在您的适配器中实现 onBindViewHolder 方法。 onBindViewHolder 有两个属性——holder 和 position。 holder 将是您的 MyViewHolder class 的一个对象,您可以使用该位置从数组列表中获取模型在该位置的对象。
已编辑
You are calling given statements
mAdapter = new MyAdapter(mref.orderByChild("date"));
mRecyclerView.setAdapter(mAdapter);
在 onStart
中。 onStart 在 onCreate 之后调用。 您在初始化之前将适配器设置为 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);
来自我的评论:
Have you already looked at the firebase/FirebaseUI-Android issue..? Setting the RecyclerView height
from wrap_content
to match_parent
solved the problem there.
显然,在 RecyclerView
中使用 FirebaseRecyclerAdapter
和 DataBinding
时 height
设置为 wrap_content
确实存在问题。
改为
android:layout_height="match_parent"
它应该可以工作。
FirebaseUI-Android 团队认为这是 RecyclerView
本身的问题并已关闭该问题。 是 Github 期的交叉帖子。
我正在使用 RecyclerView 和 databindings 但是当我第一次 运行 应用程序时没有任何显示更新一些内容或通过 instant 运行 更新应用后,内容出现。
我的 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);
将您的数据存储在您的 ArrayList 中 model.Then 尝试在您的适配器中实现 onBindViewHolder 方法。 onBindViewHolder 有两个属性——holder 和 position。 holder 将是您的 MyViewHolder class 的一个对象,您可以使用该位置从数组列表中获取模型在该位置的对象。
已编辑
You are calling given statements
mAdapter = new MyAdapter(mref.orderByChild("date"));
mRecyclerView.setAdapter(mAdapter);
在 onStart
中。 onStart 在 onCreate 之后调用。 您在初始化之前将适配器设置为 recyclerView,并且尚未创建数据库的引用。将以上两个语句放在
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);
来自我的评论:
Have you already looked at the firebase/FirebaseUI-Android issue..? Setting the
RecyclerView height
fromwrap_content
tomatch_parent
solved the problem there.
显然,在 RecyclerView
中使用 FirebaseRecyclerAdapter
和 DataBinding
时 height
设置为 wrap_content
确实存在问题。
改为
android:layout_height="match_parent"
它应该可以工作。
FirebaseUI-Android 团队认为这是 RecyclerView
本身的问题并已关闭该问题。