Почему в моем представлении корзины не отображаются данные?

Я реализовал RecyclerView показать некоторые данные таблицы областей. Я создал адаптер путем расширения от RealmRecyclerViewAdapter. Даже думал, что у меня есть 3 строки в таблице (которые я проверил по результатам отладки) ничего не отображается в списке. я использую 'io.realm:android-adapters:2.1.0' адаптер и Realm 3.7.2

Вот мой код

Адаптер класса.

 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% уверен в этом. Кто-нибудь может объяснить, как это работает? Благодарю.

2 ответа

Решение
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() который вернется false потому что вы закрыли Царство, поэтому оно будет показано с 0 количество элементов

Обратитесь к правильному управлению жизненным циклом для экземпляра Realm потока пользовательского интерфейса (onCreate() открыть, onDestroy() закрыть) в документации.

Похоже, ваши данные неверны и метод getItemCount(), который реализован в RealmRecyclerViewAdapter, возвращает 0.

Другие вопросы по тегам