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

时间:2019-02-03 21:04:23

标签: android android-viewmodel

有人可以告诉我为什么在以下代码中无法访问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;
   }
 }

3 个答案:

答案 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. 订阅
  2. 动作

答案 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()方法。新秀错误。