首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FirebaseRecyclerAdapter不适用于数据库

FirebaseRecyclerAdapter不适用于数据库
EN

Stack Overflow用户
提问于 2016-10-19 02:11:05
回答 3查看 620关注 0票数 4

我使用的是RecyclerView数据库,但是当我第一次运行应用程序时,什么都没有显示出来,然后在更新一些内容或通过即时运行更新应用程序之后,内容就会出现。

我的ViewHolder:

代码语言:javascript
运行
复制
class MyViewHolder extends RecyclerView.ViewHolder {
    private ItemBinding mBinding;

    public MyViewHolder(View itemView) {
        super(itemView);
        mBinding = DataBindingUtil.bind(itemView);
    }

    ItemBinding getBinding() {
        return mBinding;
    }
}

我的适配器:

代码语言:javascript
运行
复制
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(),那就是我没有成功。

编辑

我刚添加了一个日志呼叫:

代码语言:javascript
运行
复制
Log.d(BuildConfig.TAG, "called populateViewHolder " + position);

关于populateViewHolder方法。日志从来没有打印过。

编辑2

初始化recyclerView的方式:

代码语言:javascript
运行
复制
// 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);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-27 07:23:07

根据我的评论:

你看过firebase/firebase Android问题了吗..?将RecyclerView heightwrap_content设置为match_parent解决了这个问题。

显然,当使用带有heightFirebaseRecyclerAdapter时,RecyclerView中的FirebaseRecyclerAdapter设置为DataBinding确实存在问题。

把它改成

代码语言:javascript
运行
复制
android:layout_height="match_parent"

而且它应该能工作。

FirebaseUI-Android团队认为这是RecyclerView本身的一个问题,并且已经解决了这个问题。是吉顿事件中的交叉事件。

票数 1
EN

Stack Overflow用户

发布于 2016-10-19 04:21:46

将数据存储在ArrayList的model.Then中,尝试在适配器中实现onBindViewHolder方法。onBindViewHolder有两个属性-持卡人和位置。持卡器将是MyViewHolder类的对象,您可以使用该位置从数组列表中获取该位置的模型对象。

票数 -1
EN

Stack Overflow用户

发布于 2016-10-25 12:30:23

编辑的

你打电话给我的陈述

代码语言:javascript
运行
复制
mAdapter = new MyAdapter(mref.orderByChild("date"));
mRecyclerView.setAdapter(mAdapter);

onStart中。onStart在onCreate之后调用。在初始化适配器之前已经将适配器设置为recyclerView,并且还没有创建数据库的引用。

代码语言:javascript
运行
复制
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);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40120946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档