分页库未向我的 PagedListAdapter 发送任何数据
Paging library is not sending any data to my PagedListAdapter
我有一个 Android 待办事项列表应用程序,其中包含使用 Room 访问的 SQLite 数据库。然后我想在导航抽屉中列出可用列表。所以我使用了分页库。现在 RecyclerView 是空的,我不知道为什么。顺便说一句:none 我的列表有效。我是初学者,所以我坚持官方教程。我已经发现,它们是错误的,ViewModel
需要一个空的构造函数。现在情况是这样的:成功调用设置适配器的方法 (8),创建 ViewModel
(7) 创建 Adapter
(1),setList()
方法被称为 (9),但没有 Holder
被创建 (4),没有 onCreateViewHolder
或 onBindViewHolder
被调用 (2,3),没有 DiffCalback
方法被调用 ( 5,6) 并且只显示一个空的 Recycler 视图。 PagedList<SQLList>
包含正确的信息,但没有信息被传递给适配器。有人知道为什么吗?
//对不起我的英语。
适配器class:
//this is my Adapter. SQLList is my object (Equivalent to the User object in
the tutorial)
public class ListsAdapter extends PagedListAdapter<SQLList,ListsAdapter.Holder> {
private Context context;
public ListsAdapter(Context context) {
//1
super(DIFF_CALLBACK);
this.context = context;
}
@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
//2
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.list_item,null);
return new Holder(view);
}
@Override
public void onBindViewHolder(Holder holder, int position) {
//3
SQLList item = getItem(position);
if (item == null){
holder.clear();
}else {
holder.bindTo(item);
}
}
public static class Holder extends RecyclerView.ViewHolder {
public TextView textView;
public int id;
public TextView idView;
public Holder(View itemView) {
//4
super(itemView);
textView = itemView.findViewById(R.id.textView);
idView = itemView.findViewById(R.id.idTextView);
}
public void bindTo(SQLList list) {
textView.setText(list.getName());
id = list.getId();
idView.setText(Integer.toString(list.getId()));
}
public void clear() {
textView.setText("");
id = 0;
idView.setText("0");
}
}
private static final DiffCallback<SQLList> DIFF_CALLBACK = new DiffCallback<SQLList>() {
@Override
public boolean areItemsTheSame(@NonNull SQLList oldItem, @NonNull SQLList newItem) {
//5
return oldItem.getId() == newItem.getId();
}
@Override
public boolean areContentsTheSame(@NonNull SQLList oldItem, @NonNull SQLList newItem) {
//6
return oldItem.getName().equals(newItem.getName());
}
};
}
查看模型:
public static class ListViewModel extends ViewModel {
public final LiveData<PagedList<SQLList>> listsList;
public ListViewModel(){
//7
listsList = new LivePagedListBuilder<>(DMO.getDao().loadListFactory(),20).build();
}
}
RecyclerView
的部分片段位于:
...
//8
ListViewModel listViewModel = ViewModelProviders.of(this).get(ListViewModel.class);
adapter = new ListsAdapter(context);
listViewModel.listsList.observe(this, new Observer<PagedList<SQLList>>() {
@Override
public void onChanged(@Nullable PagedList<SQLList> sqlLists) {
//9
adapter.setList(sqlLists);
}
});
recyclerView.setAdapter(adapter);
...
发现问题:我忘记设置布局管理器了!
我遇到了同样的问题,但我不小心添加了-
RecyclerView.setHasFixedSize(true);
删除后,它起作用了。
我遇到了同样的问题,我只是删除了 RecyclerView.setHasFixedSize(true) 然后它开始正常工作。
我必须设置适配器。 recyclerView.setAdapter(adapter);
我有一个 Android 待办事项列表应用程序,其中包含使用 Room 访问的 SQLite 数据库。然后我想在导航抽屉中列出可用列表。所以我使用了分页库。现在 RecyclerView 是空的,我不知道为什么。顺便说一句:none 我的列表有效。我是初学者,所以我坚持官方教程。我已经发现,它们是错误的,ViewModel
需要一个空的构造函数。现在情况是这样的:成功调用设置适配器的方法 (8),创建 ViewModel
(7) 创建 Adapter
(1),setList()
方法被称为 (9),但没有 Holder
被创建 (4),没有 onCreateViewHolder
或 onBindViewHolder
被调用 (2,3),没有 DiffCalback
方法被调用 ( 5,6) 并且只显示一个空的 Recycler 视图。 PagedList<SQLList>
包含正确的信息,但没有信息被传递给适配器。有人知道为什么吗?
//对不起我的英语。
适配器class:
//this is my Adapter. SQLList is my object (Equivalent to the User object in
the tutorial)
public class ListsAdapter extends PagedListAdapter<SQLList,ListsAdapter.Holder> {
private Context context;
public ListsAdapter(Context context) {
//1
super(DIFF_CALLBACK);
this.context = context;
}
@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
//2
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.list_item,null);
return new Holder(view);
}
@Override
public void onBindViewHolder(Holder holder, int position) {
//3
SQLList item = getItem(position);
if (item == null){
holder.clear();
}else {
holder.bindTo(item);
}
}
public static class Holder extends RecyclerView.ViewHolder {
public TextView textView;
public int id;
public TextView idView;
public Holder(View itemView) {
//4
super(itemView);
textView = itemView.findViewById(R.id.textView);
idView = itemView.findViewById(R.id.idTextView);
}
public void bindTo(SQLList list) {
textView.setText(list.getName());
id = list.getId();
idView.setText(Integer.toString(list.getId()));
}
public void clear() {
textView.setText("");
id = 0;
idView.setText("0");
}
}
private static final DiffCallback<SQLList> DIFF_CALLBACK = new DiffCallback<SQLList>() {
@Override
public boolean areItemsTheSame(@NonNull SQLList oldItem, @NonNull SQLList newItem) {
//5
return oldItem.getId() == newItem.getId();
}
@Override
public boolean areContentsTheSame(@NonNull SQLList oldItem, @NonNull SQLList newItem) {
//6
return oldItem.getName().equals(newItem.getName());
}
};
}
查看模型:
public static class ListViewModel extends ViewModel {
public final LiveData<PagedList<SQLList>> listsList;
public ListViewModel(){
//7
listsList = new LivePagedListBuilder<>(DMO.getDao().loadListFactory(),20).build();
}
}
RecyclerView
的部分片段位于:
...
//8
ListViewModel listViewModel = ViewModelProviders.of(this).get(ListViewModel.class);
adapter = new ListsAdapter(context);
listViewModel.listsList.observe(this, new Observer<PagedList<SQLList>>() {
@Override
public void onChanged(@Nullable PagedList<SQLList> sqlLists) {
//9
adapter.setList(sqlLists);
}
});
recyclerView.setAdapter(adapter);
...
发现问题:我忘记设置布局管理器了!
我遇到了同样的问题,但我不小心添加了-
RecyclerView.setHasFixedSize(true);
删除后,它起作用了。
我遇到了同样的问题,我只是删除了 RecyclerView.setHasFixedSize(true) 然后它开始正常工作。
我必须设置适配器。 recyclerView.setAdapter(adapter);