FirebaseRecyclerAdapter 不适用于数据绑定

FirebaseRecyclerAdapter doesnt work with databindings

我正在使用 RecyclerViewdatabindings 但是当我第一次 运行 应用程序时没有任何显示更新一些内容或通过 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_contentto match_parent solved the problem there.

显然,在 RecyclerView 中使用 FirebaseRecyclerAdapterDataBindingheight 设置为 wrap_content 确实存在问题。

改为

android:layout_height="match_parent"

它应该可以工作。

FirebaseUI-Android 团队认为这是 RecyclerView 本身的问题并已关闭该问题。 是 Github 期的交叉帖子。