有人可以告诉我为什么在以下代码中无法访问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;
}
}
答案 0 :(得分:0)
也许您不应该在 onCreateView()中使用它。尝试使用调用方法,该方法将在创建一个Activity后在 onStart()附近触发对VM的观察。也许会有帮助。
当有新页面可用时,我们调用PagedListAdapter类的SubmitList()方法
public List<string> GetLatestReviews()
{
List<string> temp = new List<string>('good','average')
return temp;
}
据我了解,您调用 getAllGamebooks(),该操作会触发一些操作并返回 LiveData <*> ,然后您对其进行订阅使用 observe()。我建议您用两种方法将其分开:
答案 1 :(得分:0)
使用PagedList代替下面的列表:
gamebookViewModel.getAllGamebooks().observe(this, new Observer<PagedList<Gamebook>>() {
@Override
public void onChanged(@Nullable PagedList<Gamebook> gamebooks) {
maAdapter.submitList(bookList);
}
});
在您的视图模型中也是如此。
答案 2 :(得分:0)
发现了问题。我的适配器没有扩展ListAdapter,所以也就怪不得它没有找到SubmitList()方法。新秀错误。