为什么我不能从onChanged()中访问适配器submitList()方法?

问题描述 投票:0回答:3

有人能告诉我为什么在以下代码中无法访问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;
   }
 }
android android-viewmodel
3个回答
0
投票

也许你不应该在onCreateView()中使用它。尝试使用调用方法,在onStart()附近创建Activity后触发VM的观察。也许它会有所帮助。

当新页面可用时,我们调用PagedListAdapter类的submitList()方法

override fun onStart() {
    super.onStart()
    gamebookViewModel.callFunc()
}

另外据我所知,你调用getAllGamebooks()来触发一些动作并返回你的LiveData <*>并用observe()订阅它。我建议你用2种方法分开:

  1. 订阅
  2. 行动

0
投票

使用PagedList代替下面的列表:

gamebookViewModel.getAllGamebooks().observe(this, new Observer<PagedList<Gamebook>>() {

           @Override
           public void onChanged(@Nullable PagedList<Gamebook> gamebooks) {
                   maAdapter.submitList(bookList);
           }
       });

在你的viewmodel中也是如此。


0
投票

发现了问题。我的适配器没有扩展ListAdapter,所以难怪它找不到submitList()方法。菜鸟错误。

© www.soinside.com 2019 - 2024. All rights reserved.