为什么我的领域回收视图不显示任何数据?
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.
我已经实现了 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.