为什么我的领域回收视图不显示任何数据?

Why my realm recycle view not showing any data ?

我已经实现了 RecyclerView 显示一些领域 table 数据。我通过从 RealmRecyclerViewAdapter 扩展创建了适配器。甚至认为我在 table 中有 3 行(我通过结果调试检查过)列表中没有显示任何内容。我正在使用 'io.realm:android-adapters:2.1.0' 适配器和 Realm 3.7.2

这是我的代码。

适配器class.

 public class UserListAdapter extends RealmRecyclerViewAdapter<User,UserListAdapter.ViewHolder> {

    public UserListAdapter(@Nullable OrderedRealmCollection<User> data, boolean autoUpdate) {
        super(data, autoUpdate);
        setHasStableIds(true);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.user_list_layout, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        User user = getItem(position);
        holder.home.setText(user.getUid());
        holder.name.setText(user.getName());
        holder.home.setText(user.getHouse().getName());
        if(user.isStatus()) {
            holder.status.setText("Active");
        }else{
            holder.status.setText("Inactive");
        }
    }

    @Override
    public long getItemId(int index) {
        return getItem(index).getUid();
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        @BindView(R.id.column_id)
        TextView id;

        @BindView(R.id.column_name)
        TextView name;

        @BindView(R.id.column_house)
        TextView home;

        @BindView(R.id.status_button)
        Button status;

        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
            itemView.setOnClickListener(this);
            status.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            if(v.getId() ==  R.id.status){
                //TODO: create interface and add method tho trigger when status click
            }else{
                //TODO: create interface and add method tho trigger when item click
            }

        }
    }
}

设置适配器的代码片段

try(Realm realm = Realm.getDefaultInstance()){
            RealmResults<User> users = realm.where(User.class).findAll();
            listAdapter = new UserListAdapter(users,true);
            recyclerView.setAdapter(listAdapter);
            recyclerView.addItemDecoration(new RecyclerViewDividerVertical(2));
            recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
}

我可以将 RealmResults<User> 转换为 ArrayList<User> 并实现正常的 RecyclerView 适配器并完成它。但据我所知,RealmRecyclerViewAdapter 会在数据发生变化时自动更新结果数据。但我也不是 100% 清楚这一点。任何人都可以解释它是如何工作的吗?谢谢。

看起来您的数据无效并且 getItemCount() 方法在 RealmRecyclerViewAdapter returns 0 中实现。

try(Realm realm = Realm.getDefaultInstance()){
        RealmResults<User> users = realm.where(User.class).findAll();
        listAdapter = new UserListAdapter(users,true);
        recyclerView.setAdapter(listAdapter);
        recyclerView.addItemDecoration(new RecyclerViewDividerVertical(2));
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
} // <--- auto-close!

如果您关闭 Realm 实例,则绑定到它的结果将失效,并且 RealmRecyclerViewAdapter 检查 isValid() 这将 return false 因为您已经关闭领域,因此它将以 0 元素计数显示。

请参阅 UI 线程 Realm 实例的正确生命周期管理(onCreate() 打开,onDestroy() 关闭)in the documentation.