Почему в моем представлении корзины не отображаются данные?
Я реализовал 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.