有人能告诉我为什么在以下代码中无法访问submitList()方法?类似的代码在另一个测试应用程序中工作正常,尽管它在一个Activity中。
public class MyFFBooksFragment extends Fragment {
private int currentBook;
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private GamebookViewModel gamebookViewModel;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable
ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.myffbooks_fragment, container, false);
mLayoutManager = new LinearLayoutManager(getActivity());
final ArrayList<BookItem> bookList = new ArrayList<>();
final BookItemAdapter maAdapter = new BookItemAdapter(bookList);
mRecyclerView = view.findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setAdapter(maAdapter);
gamebookViewModel = ViewModelProviders.of(this).get(GamebookViewModel.class);
gamebookViewModel.getAllGamebooks().observe(this, new Observer<List<Gamebook>>() {
@Override
public void onChanged(@Nullable List<Gamebook> gamebooks) {
maAdapter.submitList(bookList);
}
});
return view;
}
}
也许你不应该在onCreateView()中使用它。尝试使用调用方法,在onStart()附近创建Activity后触发VM的观察。也许它会有所帮助。
当新页面可用时,我们调用PagedListAdapter类的submitList()方法
override fun onStart() {
super.onStart()
gamebookViewModel.callFunc()
}
另外据我所知,你调用getAllGamebooks()来触发一些动作并返回你的LiveData <*>并用observe()订阅它。我建议你用2种方法分开:
使用PagedList代替下面的列表:
gamebookViewModel.getAllGamebooks().observe(this, new Observer<PagedList<Gamebook>>() {
@Override
public void onChanged(@Nullable PagedList<Gamebook> gamebooks) {
maAdapter.submitList(bookList);
}
});
在你的viewmodel中也是如此。
发现了问题。我的适配器没有扩展ListAdapter,所以难怪它找不到submitList()方法。菜鸟错误。